원래는 스프링 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();
}