// 특정 Http 요청에 대한 웹 기반 보안 구성
@Bean
public SecurityFilterChain filterChain(HttpSecurity http)throws Exception{
return http.
authorizeRequests()
.requestMatchers("/login","/signup","/user").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/articles")
.and()
.logout()
.logoutSuccessUrl("/login")
.invalidateHttpSession(true)
.and()
.csrf().disable()
.build();
}
requestMatcher() : 특정 요청과 일치하는 url에 대한 액세스 설정
permitAll() : 누구나 접근이 가능하게 설정 -> 인증/인가 없이도 접근할 수 있음
anyRequest() : 설정한 url 이외의 요청에 대해서 설정함
authenticated() : 별도의 인가는 필요하지 않지만 인증이 성공된 상태여야 접근할 수 있음
폼 기반 로그인 설정
loginPage() : 로그인 페이지 경로 설정
defautlSuccessUrl() : 로그인이 완료되었을 때 이동한 경로 설정함
로그아웃 설정
logoutSuccessUrl() : 로그아웃이 완료되었을 때 이동할 경로 설정
invalidateHttpSession() : 로그아웃 이후에 세션을 전체 삭제할 지 여부 설정
-csrf 설정 비활성화
** CSRF 공격을 방지하기 위해서는 활성화하는 게 좋음
/**인증 관리자 관련 설정*/
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http, BCryptPasswordEncoder bCryptPasswordEncoder, UserDetailsService userDetailsService) throws Exception{
return http.getSharedObject(AuthenticationManagerBuilder.class)
.passwordEncoder(bCryptPasswordEncoder)
.and()
.build();
}
-> 사용자 정보 가져올 때 재정의하거나 인증방법 등을 설정할 때 사용함