Spring Boot 3.1 & Spring Security 6: Security Config 최적화 리팩토링 (12편)
·
Spring/Spring Security
이번에는 필요없는 필터는 없애고 최적화를 진행하기 위해 Security Config를 리팩토링 했다. 1. SecurityConfig 리팩토링 앞의 게시글을 확인해보면 작성한 코드가 있기에 변경된 메서드만 설명하겠다. 일단 나는 ssl(서버 사이드 랜더링)이기 때문에 에러페이지, 메인페이지, 회원가입, 로그인, 정적 리소스는 모두 접근을 허가해줬다. 여기서 특히 바뀐건 addFilterBefore() 이것이다. jwtAuthorizationFilter 다음 바로 customAuthenticationFilter로 가도록 했다. @Bean public SecurityFilterChain filterChain( HttpSecurity http, CustomAuthenticationFilter customAut..
Spring Boot 3.1 & Spring Security 6: JWT 검증 리팩토링 (11편)
·
Spring/Spring Security
JWT 필터 스프링 시큐리티 코드 리팩토링을 진행했다. 1. JwtAuthorizationFilter 클래스를 리팩토링 했다. 기존에는 한줄로 이루어져있던 코드를 extract method로 각각 역할별로 추출했다. import com.fasterxml.jackson.databind.ObjectMapper; import com.recipia.web.config.security.jwt.TokenUtils; import com.recipia.web.domain.user.constant.RoleType; import com.recipia.web.exception.ErrorCode; import com.recipia.web.exception.RecipiaApplicationException; import io...
Spring Security 6 이해하기: 동작 원리와 보안 기능 탐구
·
Spring/Spring Security
스프링 시큐리티가 어떻게 동작하는지 궁금해서 알아봤다. 1. 최상위 필터 인터페이스인 SecurityFilterChain 확인 package org.springframework.security.web; import java.util.List; import jakarta.servlet.Filter; import jakarta.servlet.http.HttpServletRequest; /** * Defines a filter chain which is capable of being matched against an * {@code HttpServletRequest}. in order to decide whether it applies to that request. * * Used to configure a ..
[스프링, 스프링 부트] Spring test - when()에서 발생한 에러
·
Spring/테스트 코드
Pageable 테스트를 진행하던중 에러가 발생했다. 1. 에러가 발생한 코드 확인 when(boardService.selectAllBoardList(pageable)).thenReturn(boardDtoPage); 에러 메시지는 NullPointerException이었다. 이건 when(boardService.selectAllBoardList(pageable)).thenReturn(boardDtoPage); 부분에서 모의 객체의 동작을 설정할 때 문제가 발생한 것이다. 모의 객체의 동작을 when()또는 given()으로 설정할 때, 메서드 호출에 사용되는 인자가 정확히 일치해야 한다. Pageable 인스턴스는 동일한 페이지 번호와 페이지 크기를 가지더라도 다른 인스턴스일 수 있으므로, 이로 인해 문..
[스프링, 스프링부트] Spring test - 스프링 시큐리티의 authentication객체를 어떻게 사용해야 할까?
·
Spring/테스트 코드
Controller 테스트를 하면서 시큐리티의 authentication객체를 매게변수로 받아서 사용하도록 작성한 메서드에서 많은 고민을 하게되었다. 왜냐하면 테스트를 위해 이 객체를 주입해줘야 했기 때문이다. 그래서 어떻게 해결할지 고민을 했다. 1. 먼저 커스텀 Annotation을 만들어서 사용해보자는 결심이 들었다. 1-1. config 패키지에 annotation 패키지를 생성한다. 1-2. annotation패키지에 아래의 클래스들을 생성한다 InjectAuthentication - 어노테이션 클래스 /** * 시큐리티 authentication을 주입하는 커스텀 annotation */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.MET..
Spring: Maven과 Gradle의 차이
·
Spring/Spring 기초 지식
Maven와 Gradle의 차이점이 뭘까? 📌 서론 스프링을 사용하다 보면 라이브러리를 다운받기 위해 pom.xml이나 build.gradle에 사용하고자하는 라이브러리를 적어주곤 한다. 그런데 이런 것들은 maven, gradle에 의해서 다운받아지고 라이브러리 의존성이 관리되는데 이것들에 대해서 자세히 알아볼 기회는 많지 않다. 이번에는 maven, gradle에 대해서 알아보도록 하자 아래의 글을 통해 maven과 gradle에 대한 이해를 하고 오시는것을 추천합니다! Spring: Maven이 뭘까? 이번 포스트에서는 Maven에 대해서 알아보자 📌 서론 이전 회사에서 작업을 할 때 SpringFramework3.x.x 버전을 사용하고 Maven을 사용했던 기억이 있다. 이때 첫 프로젝트를 하면서..
SpringBoot: 인터셉터(interceptor)의 동작원리
·
Spring/Spring 기초 지식
스프링 부트에서 사용되는 Interceptor의 동작원리를 알아보자 1. 스프링부트에서 인터셉터란? 스프링부트에서의 인터셉터 스프링부트에서 인터셉터는 웹 애플리케이션에서 요청과 응답을 처리하는 중간 단계에서 사용된다. 인터셉터는 특정 URI 패턴에 대한 요청을 가로채어, 컨트롤러가 처리하기 전후에 추가적인 작업을 할 수 있게 해 준다. 이를 통해, 로그인 체크, 권한 검증, 로깅 등과 같은 작업을 효율적으로 처리할 수 있다. 인터셉터의 동작 과정 클라이언트로부터 들어오는 요청(HttpRequest)을 가로챈다. 가로챈 요청에 대해 원하는 처리(예: 로그인 체크, 권한 체크 등)를 수행한다. 처리가 끝난 후, 요청을 원래의 목적지인 컨트롤러로 전달한다. 컨트롤러가 응답(HttpResponse)을 반환하면,..
Spring MVC의 Model, ModelAndView, ModelMap 비교
·
Spring/Spring 기초 지식
Model, ModelAndView, ModelMap의 차이점 그리고 @ModelAttribute에 대해서 알아보자 📌 서론 스프링 프레임워크에서는 컨트롤러(Controller)에서 뷰(View)로 데이터를 전달하는 여러 가지 방법이 있다. 이번 포스트에서는 이러한 방법 중에서 스프링 MVC에서 사용되는 Model, ModelMap, ModelAndView의 사용에 대해 좀 더 상세하게 설명하도록 한다. 1. 스프링 부트의 모듈 이해하기 Model Model은 스프링 MVC에서 뷰 렌더링에 사용되는 데이터를 컨트롤러로부터 뷰로 전달하는 역할을 하는 기본 인터페이스다. 컨트롤러에서 Model 객체에 데이터를 추가하면, 이 데이터는 뷰로 전달되어 활용될 수 있다. Model에 데이터를 추가하고 싶다면, 'a..