InTen

[Spring] 스프링 Security WebSecurityConfigurerAdapter Deprecated 해결 방법 본문

프로그래밍/자바

[Spring] 스프링 Security WebSecurityConfigurerAdapter Deprecated 해결 방법

인텐 2022. 11. 23. 11:02

군대 전역 후 스프링을 다시 하려니 스프링 Security 부터 시작해서 바뀐 부분이 너무나 많아서 Deprecated 된 클래스들이 생각보다 많아서 정리를 하려고 합니다.

 

기존에 코드 대로 할려고 하신 분들은 많이들 당황 하셨을 꺼라고 생각하는데요.

Rest Api 서버 토큰 생성하는 법을 바뀐 부분을 수정해서 처음부터 설명과 함께 올려드리겠습니다.

2022년부터 새로 바뀐 스프링 Security에 대한 것들을 정리 하면서 천천히 따라 오시면 될 것 같습니다.

 

거두 절미 하고 기존 코드와 바뀐 코드를 보여 드리겠습니다.

 

기존 코드

@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    private final TokenProvider tokenProvider;


    protected SpringSecurityConfig(TokenProvider tokenProvider) {
        this.tokenProvider = tokenProvider;
    }


    @Override
     public void configure(WebSecurity web) {
        web.ignoring().antMatchers(
                "/v3/api-docs/**",
                "/swagger-ui.html",
                "/swagger/**"
        );
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .httpBasic().disable()
                .csrf().disable()
                .sessionManagement()
                .sessionCreationPolicy(
                        SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/sign-api/sign-in","/sign-api/sign-up" ).permitAll()
                .antMatchers("/swagger-resources/**").permitAll()
                .antMatchers("**exception**").permitAll()
                .anyRequest().hasRole("USER")
                .and()
                .exceptionHandling().accessDeniedHandler(new CustomAccessDeniedHandler())
                .and()
                .exceptionHandling().authenticationEntryPoint(new CustomAuthenticationEntryPoint())
                .and()
                .addFilterBefore(new JwtAuthenticationFilter(tokenProvider), UsernamePasswordAuthenticationFilter.class);

    }

}

 

바뀐 후 코드는 아래 링크의 스프링 블로그에 기술되어 있는 방식으로 변경

https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

 

Spring Security without the WebSecurityConfigurerAdapter

<p>In Spring Security 5.7.0-M2 we <a href="https://github.com/spring-projects/spring-security/issues/10822">deprecated</a> the <code>WebSecurityConfigurerAdapter</code>, as we encourage users to move towards a component-based security configuration.</p> <p

spring.io

@Configuration
@EnableWebSecurity
public class SpringSecurityConfig {

    private final TokenProvider tokenProvider;


    protected SpringSecurityConfig(TokenProvider tokenProvider) {
        this.tokenProvider = tokenProvider;
    }


    @Bean
    public WebSecurityCustomizer configure() {
        return (web) -> web.ignoring().mvcMatchers(
                "/v3/api-docs/**",
                "/swagger-ui.html",
                "/swagger/**"
        );
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .httpBasic().disable()
                .csrf().disable()
                .sessionManagement()
                .sessionCreationPolicy(
                        SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/sign-api/sign-in","/sign-api/sign-up" ).permitAll()
                .antMatchers("/swagger-resources/**").permitAll()
                .antMatchers("**exception**").permitAll()
                .anyRequest().hasRole("USER")
                .and()
                .exceptionHandling().accessDeniedHandler(new CustomAccessDeniedHandler())
                .and()
                .exceptionHandling().authenticationEntryPoint(new CustomAuthenticationEntryPoint())
                .and()
                .addFilterBefore(new JwtAuthenticationFilter(tokenProvider), UsernamePasswordAuthenticationFilter.class);

                return http.build();
    }

}

 

 

WebSecurityConfigurerAdapter 를 Deprecated 한 이유는 Component-base 로 시큐리티를 구성하고 싶었다는게 이유 라고 합니다. 그래서 의존성을 지우고 Bean으로 등록해서 사용하라고 합니다.

 

다음 단계로는 토큰 Provider를 만들어 보겠습니다.

다음 클래스에서 Deprecated 된 메소드는 Jwts에 parser()와 signWith() 이 두개에 대해서 이야기 해보겠습니다.

 

다들 좋은 하루 되시길 바라겠습니다.

 

'프로그래밍 > 자바' 카테고리의 다른 글

[Spring] 스프링 Security Token Provider 만드는 법  (0) 2022.11.23
Comments