SpringSecurity 6.2 version apply(c) : 'apply(C)' is deprecated since version 6.2 and marked for removal

XingXi·2024년 1월 16일
0

기록

목록 보기
8/33
post-thumbnail

JPA 연습을 위해 이런 허접한 ER 다이어그램을 작성하고
SpringBoot 를 사용하여 어플리케이션을 개발하고 있었다.
이왕 하던거 오랜만에 SpringSecurity 를 사용하여 JWT 까지 적용시키려고 했다.

'apply(C)' is deprecated since version 6.2 and marked for removal

SpringSecurity 6.2 버전 부터는 apply api 를 사용하지 못한다고 한다.

해결 방법

해결 방법은 생각보다 꽤 간단했다.
내가 apply 를 사용하는 이유는 JWT 토큰을 감지하는 필터를 추가하기 위해서 사용하는 것이다.
그래서 추가하려고 한 JwtSecurityConfig 클래스는 내가 정의한 필터와 필터의 위치를
지정해주기 위해서 사용한다.

JwtSecurityConfig

@RequiredArgsConstructor
public class JwtSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity>
{
    private final TokenSetting setting;
    @Override
    public void configure(HttpSecurity http) {
        http.addFilterBefore(
                new JwtFilter(setting), UsernamePasswordAuthenticationFilter.class
        );
    }
}

HttpSecurityBuilder 에 addFilterBefore 추가하여 사용

SpringSecurityConfig

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SpringSecurityConfig
{
    private final TokenSetting setting;
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.csrf(AbstractHttpConfigurer::disable)
                .cors(AbstractHttpConfigurer::disable)
                .sessionManagement(m -> m.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                        .formLogin(AbstractHttpConfigurer::disable)
                        .httpBasic(AbstractHttpConfigurer::disable)
                .addFilterBefore(new JwtFilter(setting), UsernamePasswordAuthenticationFilter.class)
        .authorizeHttpRequests(auth -> auth.anyRequest().permitAll());
        return  http.build();
    }

.addFilterBefore(new JwtFilter(setting), UsernamePasswordAuthenticationFilter.class)
기존의 addFilterBefore필드를 HttpSecurity빌더에서 사용하여 추가했다.

결과

Controller

@Controller
public class TestController {

    @GetMapping("/mean")
    @ResponseBody
    public String test()
    {
        return "mean";
    }
}

Filter

@RequiredArgsConstructor
@Slf4j
public class JwtFilter extends OncePerRequestFilter {


    private final TokenSetting setting;

    private String resolveToken(HttpServletRequest request)
    {
        String bearerTkn = request.getHeader("Authorization");

        if(hasText(bearerTkn) && bearerTkn.startsWith("Bearer ")) return bearerTkn.substring(7);
        return null;

    }

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        String jwt = resolveToken(request);
        String uri = request.getRequestURI();

        log.info("요청 URL : {}",uri);

        if(hasText(jwt))
        {
            System.out.println("토큰 존재");
        }
        else
        {
            System.out.println("토큰 존재 X");
        }
        filterChain.doFilter(request,response);
    }
}

SpringSecurityConfig

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SpringSecurityConfig
{
    private final TokenSetting setting;
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.csrf(AbstractHttpConfigurer::disable)
                .cors(AbstractHttpConfigurer::disable)
                .sessionManagement(m -> m.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                        .formLogin(AbstractHttpConfigurer::disable)
                        .httpBasic(AbstractHttpConfigurer::disable)
                .addFilterBefore(new JwtFilter(setting), UsernamePasswordAuthenticationFilter.class)
        .authorizeHttpRequests(auth -> auth.anyRequest().permitAll());
        return  http.build();
    }

결과



정상적으로 필터가 추가된 것을 확인할 수 있다.

0개의 댓글