Spring Security Config

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityJavaConfig extends WebSecurityConfigurerAdapter {
     @Autowired
     private AuthenticationService authenticationService;

     @Override
     protected void configure(HttpSecurity http) throws Exception {
         final Filter authenticationFilter = new JwtAuthenticationFilter(
             authenticationManager(), authenticationService
         );

         final Filter authenticationErrorFilter = new AuthenticationErrorFilter();
         http
             .csrf().disable()
             .addFilter(authenticationFilter)
             .addFilterBefore(
                 authenticationErrorFilter, JwtAuthenticationFilter.class
             )
             .sessionManagement()
                 .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
             .and()
             .exceptionHandling()
                 .authenticationEntryPoint(
                     new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)
                 );
     }
 }

WebSecurityConfigurerAdapter

  • WebSecurityConfigurer 생성에 필요한 기본 클래스 제공

configure()

  • protected void configure(AuthenticationManagerBuilder auth) throws Exception
    • 인증 메커니즘 설정시 사용
public void configure(AuthenticationManagerBuilder auth) {
    auth
        .inMemoryAuthentication()
        .withUser("user")
        .password("password")
        .roles("USER")
    .and()
        .withUser("admin")
        .password("password")
        .roles("ADMIN","USER");
}
  • public void configure(WebSecurity web) throws Exception
    • global security에 영향을 미치는 설정 세팅시 사용
      • 디버그 모드 설정, 요청 거절, 리소스 무시 등
  • protected void configure(HttpSecurity http) throws Exception
    • 리소스 레벨에서의 security 설정 세팅시 사용

HttpSecurity

  • Spring Security의 XML <http>와 동일
  • Http 요청과 관련한 설정 세팅시 사용

csrf()

  • CSRF 관련 설정을 추가한다.
  • WebSecurityConfigurerAdapter의 기본 생성자를 사용하는 경우 디폴트로 설정된다.
    • disable 메서드를 이용하여 비활성화 가능
  • csrf(사이트간 요청 위조)(참고)
    • 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 생성 등)를 특정 사이트에 요청하게 하는 행위

Filter

  • 리소스와 관련된 요청, 응답과 관련한 필터링을 수행하는 개체
  • doFilter 메서드를 통하여 필터링 수행
  • HttpSecurity의 addFilter() addFilterBefore() addFilterAfter() addFilterAt()등을 사용하여 등록

sessionManagement()

  • HttpSecurity에 세션관리 설정(SessionManagementConfigurer) 등록시 사용
  • SessionManagementConfigurer개체를 생성하여 getOrApply 적용후 리턴
    • getOrApply()
      • 기존에 등록되어 있는 경우 등록된 개체를 리턴하고 없는 경우 새 개체를 등록후 리턴한다.

SessionManagementConfigurer

  • 세션 관리 관련 설정 세팅시 사용

    • SessionManagementFilter를 등록한다.
    • 동시에 존재할 수 있는 세션의 수가 제한되어 있는 경우 ConcurrentSessionFilter를 등록한다.
  • sessionCreationPolicy()

    • SessionManagementConfigurer에 세션 생성 정책을 등록한다.
  • and()

    • SecurityBuilder로 되돌아간다.
    • sessionManagement()에 의해 SessionManagementConfigurer가 생성된 경우
      • SecurityBuilder == HtteSecurity

exceptionHandling()

  • == sessionManagement()
  • WebSecurityConfigurerAdapter 사용시 자동으로 설정된다.

ExceptionHandlingConfigurer

  • Spring Security관련 예외 처리 설정 세팅시 사용
    • 모든 프로퍼티에 기본값이 설정되어 있음
    • ExceptionTranslationFilter를 등록한다.
      • AccessDeniedException, AuthenticationException 예외 처리에 사용
      • Java Exception과 Http Response를 연결한다.
  • authenticationEntryPoint()
    • ExceptionHandlingConfigurer에 AuthenticationEntryPoint 등록시 사용
    • AuthenticationEntryPoint
      • AuthenticationException이 감지된 경우, AccessDeniedException이 감지되었고 익명의 사용자인 경우 실행
    • HttpStatusEntryPoint
      • AuthenticationException가 Http Status를 Http Response로 보내도록 한다.

좋은 웹페이지 즐겨찾기