if (result != null) {
if (this.eraseCredentialsAfterAuthentication && (result instanceof CredentialsContainer)) {
// Authentication is complete. Remove credentials and other secret data
// from authentication
((CredentialsContainer) result).eraseCredentials();
}
// If the parent AuthenticationManager was attempted and successful then it
// will publish an AuthenticationSuccessEvent
// This check prevents a duplicate AuthenticationSuccessEvent if the parent
// AuthenticationManager already published it
if (parentResult == null) {
this.eventPublisher.publishAuthenticationSuccess(result);
}
return result;
}
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean // 필터를 bean component 생성
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // 원하는 필터를 골라서 커스텀 적용시킬 수 있다.
return http
// 권한 설정
.csrf().disable() // 해당 설정 안하면 csrf 토큰이 없어서, post 는 forbidden 이 나오므로 테스트에선 해제
.authorizeRequests()
.antMatchers("/user/**").hasRole("USER") // ROLE 이 필요한 URL 을 먼저 적용 시킨다.
.antMatchers("/manager/**").hasRole("MANAGER")
.antMatchers("/login").not().hasAnyRole("USER", "MANAGER") // 로그인 이후 접근 금지
.antMatchers("/**").permitAll()
// 로그인
.and()
.formLogin() // 해당 url 은 form 으로 이동
.loginPage("/login")
.loginProcessingUrl("/login") // 시큐리티가 로그인 대신 진행
.defaultSuccessUrl("/")
.failureUrl("/login")
// 로그아웃
.and()
.logout()
.logoutSuccessUrl("/")
.deleteCookies("JSESSIONID")
.and().build();
}
}