| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 서버
- 프로그래머스
- array
- 컴퓨터 공학
- 백엔드스쿨
- actuator
- 백엔드공부
- LinkedList
- spring boot
- 백엔드
- spring
- 개발자
- Java
- TestCode
- SpringBoot
- 핵심가이드
- 백준
- 자료구조
- restTemplate
- 스프링부트
- error
- 제로베이스
- QueryDSL
- SpringSecurity
- 컴퓨터 구조
- 연관관계
- ORM
- JWT
- JPA
- queue
- Today
- Total
목록SpringBoot (39)
be_better
에러내용 Springboot 2.x버전으로 프로젝트 진행 중 3.x버전으로 변경하게 되었고 SpringSecurity도 6.x 버전으로 Upgrade를 해야하는 상황이었다. Springboot, Security 둘다 버전업을 하고 Postman에서 정상적으로 동작하는것까지 확인했는데, 잘되던 Test Code Controller test에서 말썽이었다. Controller Test중 Body에는 아무값도 들어있지 않고 403 Forbidden이 발생한 상황 원인 Spring Security의 어노테이션인 EnableWebSecurity에는 기본적으로 CSRF 공격을 방지하는 기능을 갖고있다. CSRF(Cross-Site Request Forgery) 공격이란 사이트 간 요청 위조의 줄임말로 웹 애플리케이..
에러 내용 User 권한 추가 테스트 코드 작성 중 ImmutableCollections 에러가 발생했다. 나의 경우 User 권한 roles를 Set 타입으로 지정하고 관리하고 있다. mock으로 가상의 유저를 만들어주고 권한도 지정해준다. Set roleSet = Set.of("ROLE_VIEWER"); given(userRepository.findByUidAndDeletedAtNull(anyString())) .willReturn(Optional.of(User.builder() .uid("testId") .roles(roleSet) .build() ) ); 원인 원인은 roleSet을 선언해줄때 new HashSet() 이 아닌 Set.of() 로 지정해줬기 때문이다. Set.of()를 사용하면 불..
프로젝트 진행중에 유저 정보를 update 하는 api를 unit 테스트 하려는데, header 값으로 넣어줄 jwt accessToken에 대한 유저권한처리가 안돼서 발목을 잡혔다. 해결 SecurityConfig에서 SecurityContext에 유저 권한을 넣어주고 Filter에서 처리하는데 test code를 실행할때도 main module의 SecurityContext를 참조하기 때문에 유저 역할(권한) 처리가 안되는 것이라고 이해했다. 따라서 test module에서 따로 SecurityContext에 필요한 권한을 넣어줘야 한다. 나같은 경우에는 유저 정보 update api는 "USER_VIEWER" 권한을 갖는 유저만 접근할 수 있다. 매번 권한을 설정하는것보다 어노테이션을 만드는게 나아..
에러 내용 프로젝트 진행 중 Response Dto에 createdAt, updatedAt 을 리턴하는 코드를 구현했는데 결과값을 확인하는 과정에서 이와같은 에러가 발생했다. 그전까진 잘 작동하다가 ObjectMapper를 Bean으로 등록하고나서 생긴 오류이다. 원인 LocalDateTime type 직렬화, 역직렬화에 문제가 있어서 생기는 에러이다. 데이터를 주고받으면서 내부의 MessageConverter의 ObjectMapper가 데이터 형식을 바꾸는데 ObjectMapper를 빈으로 등록해 사용하게되니 적용이 잘 안된게 원인이라고 생각한다. 해결 첫번째 해결책 에러메세지에는 add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" ..
프로젝트 진행 중 유저의 프로필 사진을 받아 AWS s3에 저장하는 기능을 구현하기 전에 로컬 디렉토리에 이미지가 저장되는지 확인하기 위해 간단하게 테스트를 진행했다. 업로드 테스트 편의를 위해 Controller 만 구현하였다. TestController @Slf4j @RestController @RequestMapping("/test") public class TestController { @GetMapping("") public String uploadImgFile(@RequestParam(value = "image") MultipartFile image) { log.info("[uploadImgFileTest] file name : {}", image.getOriginalFilename()); t..
스프링 시큐리티와 JWT 적용 SpringSecurity 의존성 프로젝트 생성후 의존성을 추가 // gradle dependencies { // spring security implementation 'org.springframework.boot:spring-boot-starter-security' // jwt 토큰 implementation 'io.jsonwebtoken:jjwt:0.9.1' } // maven org.springframework spring-boot-starter-security io.jsonwebtoken jjwt 0.9.1 UserDetails와 UserDetailsService 구현 data/entity/User.java @Getter @Setter @AllArgsConstruc..
JWT(JSON Web Token) JWT 특징 당사자 간의 정보를 JSON 형태로 안전하게 전송하기 위한 토큰. URL로 이용할 수 있는 문자열로만 구성되어 있으며, 디지털 서명이 적용되어 있어 신뢰 가능. 주로 서버와의 통신에서 권한 인가를 위해 사용. HTTP 구성요소 어디든 위치할 수 있음. JWT 구조 JWT는 헤더(Header), 내용(Payload), 서명(Signature) 을 "."으로 구분하여 구성된다. 헤더 검증과 관련된 내용 { /* 해싱 알고리즘 지정, SHA256 또는 RSA 사용 서명 부분에서 사용됨 "HS256" 은 "HMAC SHA256" 알고리즘 사용을 의미 */ "alg": "HS256", /* 토큰의 타입 지정 */ "typ": "JWT" } 이렇게 완성된 헤더는 Ba..
보안 필터체인 종류 및 순서 보안필터 체인에서 사용하는 필터에는 여러 종류가 있다. 공식 문서에서 소개하는 필터의 실행 순서 ChannelProcessingFilter WebAsyncManagerIntergrationFilter SecurityContextPersistenceFilter HeaderWriterFilter CorsFilter CsrfFilter LogoutFilter OAuth2AuthorizationRequestRedirectFilter Saml2WebSsoAuthenticationRequestFilter X509AuthenticationFilter AbstractPreAuthenticationedProcessingFilter CasAuthenticationFilter OAuth2Logi..