[Spring] 시큐리티 Security WebSecurityConfigurerAdapter Deprecated

김나우·2022년 9월 18일
0

Spring

목록 보기
12/13

WebSecurityConfigurerAdapter


원래는 스프링 Security에서 WebSecurityConfigurerAdapter를 사용했었는데 최근에
Deprecated 되었다.

스프링 공식 문서를 보면

WebSecurityConfigurerAdapter가 Deprecated 되었으니 SecurityFilterChain를 Bean으로 등록해서 사용하라고 나와있습니다.

기존코드

 @Override
    public void configure(WebSecurity web) throws Exception {
        web
                .ignoring().antMatchers("/assets/**", "/css/**", "/dist/**", "/js/**", "/plugins/**",
                "/favicon.ico", "/resources/**", "/error");
    }
    
 @Override
    public void configure(HttpSecurity http) throws Exception {
        //HttpServletRequest 에 따라 접근을 제한
        //antMatchers()메서드로 특정 경로를 지정, permitAll(), hasRole()메서드로 접근 설정
        http.authorizeRequests()
                    .antMatchers("/admin/**").hasRole("ADMIN")
                    .antMatchers("/user/myinfo").hasRole("USER")
                    .antMatchers("/", "/boards/**","/auth/**")
                    .permitAll()
                    //그 외의 경로는 인증된 사용자만 접근 가능
                     .anyRequest()
                     .authenticated()
                .and()
                        .formLogin()
                        .loginPage("/auth/login")
                        .loginProcessingUrl("/loginProc")
                        .failureHandler(customFailureHandler)
                .defaultSuccessUrl("/")
                    .and()
                        .logout()
                        //로그아웃 안되던거 아래거 추가해서 해결
                        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                        .logoutSuccessUrl("/")
                        .invalidateHttpSession(true);
    }
    
@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(customMemberDetailService).passwordEncoder(encoder());
    }

변경 후

@Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring().antMatchers("/assets/**", "/css/**", "/dist/**", "/js/**", "/plugins/**",
                "/favicon.ico", "/resources/**", "/error");
    }
    
 @Bean
    @Order(SecurityProperties.BASIC_AUTH_ORDER)
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/myinfo").hasRole("USER")
                .antMatchers("/","/boards/**","/auth/**")
                .permitAll()
                    .anyRequest()
                    .authenticated()
                .and()
                    .formLogin()
                    .loginPage("/auth/login")
                    .loginProcessingUrl("/loginProc")
                    //.failureHandler(customFailureHanlder)
                    .defaultSuccessUrl("/")
                .and()
                    .logout()
                    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                    .logoutSuccessUrl("/")
                    .invalidateHttpSession(true);

        return http.build();
    }

@Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
    }
profile
안녕하세요

0개의 댓글