개발/스프링

개발/스프링

SpringSecurity 항상 403에러가 뜨는 이유

문제 발생SpringBoot Validation 패키지를 추가한 뒤 Validation을 테스트하던 중 이상한 문제가 발생했다.400 Bad Request가 떠야하는 부분에서 403 Forbidden이 뜨는 것이었다.단순하게 403만 뜨는게 아니라 body가 완전히 비어져있으며, Spring의 로그에 관련한 어떠한 에러도 뜨지 않는다.분명 Spring 로그를 보면 validation에 성공했고, 400을 내려야할 것 같은데 왜 다른 에러도 없이 403이 내려갈까?? Spring의 에러처리와 Tomcat에러 발생Validation쪽이든 어디서든, 에러가 발생하면 DefaultHandlerExceptionResolver로 넘어가서 처리하게 된다.@Nullable protected ModelAndView ha..

개발/스프링

SpringSecurity로 JWT 인증 구현

구현JwtAuthenticationFilterSpringSecurityFilter에 등록할 필터 중 하나로, 요청에 token이 포함되어 있는지, 포함되어 있다면 유효한지,유효하다면 DB에 조회하여 Authentication객체를 만들고, SecurityContextHolder를 통해서 저장하는 역할을 한다.@Slf4j @Component @RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtUtilities jwtUtilities; @Override protected void doFilterInternal( HttpServletRequest request, Ht..

개발/스프링

SpringSecurity 구조

Tomcat의 구조요청이 들어오면 여러가지 Filter들을 통해서 연쇄적으로 동작이 수행된다.DispatcherServlet을 통해서 어떤 Controller로 들어오는 요청인지 확인하고 해당 Controller를 통해 요청을 처리한다. SpringSecurity 추가시SpringSecurity를 추가하게 되면 내장된 Filter가 등록되고, 이를 SecurityFilter라 부른다. 💡더 정확히는 Tomcat의 filter중 Spring에서 작성된 DelegatingFilterProxy를 filter로 등록한다. 이 DelegatingFilterProxy는 내부적으로 스프링의 Bean인 FilterChainProxy를 사용하는데, 이는 SecurityFilterChain을 사용해서 SecurityFil..

개발/스프링

@MappedSuperclass VS @Embedded

의문Realworld 프로젝트를 시작하면서 엔티티 정의와 매핑을 하기 시작했다.모든 테이블에 공통적으로 들어갈 (Id, createdAt, updatedAt)속성은 강의에서 배운대로 BaseEntity로 뽑아내었고 개발 편의성이나 개념적으로도 타당하다고 생각했다.그런데, 프로젝트 API Response format Users와 Profile을 보면 상당부분이 비슷함을 알 수 있다.반환할 때 DTO를 반환할 것이기 때문에 크게 상관이 없긴 하지만, 문제는 엔티티 매핑할 때 발생한다.단위가 더 큰 User클래스를 엔티티로 만들고 사용하려 했지만, 다른 API들에서는 대부분 Profile을 내려주고 있다. 이럴 때는 Profile에 해당하는 클래스를 그냥 하나 만들어주고 User쪽에서 @Embedded로 받는..

피곤한투티
'개발/스프링' 카테고리의 글 목록