springframework/시작하자SpringSecurity 44

33.CustomAccessDeniedHandler

인가 예외처리는 ExceptionTranslationFilter가 처리한다는 것을 기억해야한다. ExceptionTranslationFilter를 작동시키는 API가 exceptionHandling() 이다. 예외를 던지는 주체는 FilterSecurityIntercepter FilterChainProxy 의 Filter Type Bean중에서 마지막에 위치한다. AccessDecisionManager > AccessDecisionVotor 로 넘어가 심사를 한뒤 AccessDeniedExcpetion 이 던져진다. 이를 받아 다시 ExceptionTranslationFilter에게 AccessDeniedException을 던진다. ExceptionTranslationFilter 는 AccessDenie..

32.CustomAuthenticationFailureHanlder

AuthenticationFailureHanlder 인터페이스에도 스프링 시큐리티가 지원하는 클래스가 있다. SimpleUrlAuthenticationFailureHandler 가 그것이다. public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler public void onAuthenticationFailure(request, response, authenticationExcpetion) 보통 예외에 대한 분기처리로 나뉜다. UserDetailsService 에서 발생하는 UsernameNotFoundException AuthenticationProvider 에서 발생하는 BadCredentia..

31.CustomAuthenticationSuccessHandler

SimpleUrlAuthenticaionSuccessHandler는 스프링 시큐리에서 지원하는 AuthenticationSuccessHandler 구현체이다. SimpleUrlAuthenticationSuccessHandler 를 상속받아 원하는 AuthenticationSuccessHandler 를 만들자. public void onAuthenticationSuccess(request, response, authentication) 인증에 성공하지 못한 상태에서 로그인페이지에서 다시 인증에 성공하면 사용자가 가려고 했던 자원경로가 담긴 SavedRequest 를 가진 RequestCache 를 가져와 이동시킨다. 사용해야할 객체는 HttpSessionRequestCache 이다. 인증 성공 작업이 끝나..

30.WebAuthenticationDetails, AuthenticationDetailsSource

FormLogin 인증 과정에서 유저가 넘겨주는 부가적인 파라미터 정보를 저장하는 객체가 WebAuthenticationDetails, WebAuthenticationDetails 를 생성하는 객체가 AuthenticationDetailsSource 이다. 사용자의 인증요청 AuthenticationFilter 작동 사용자의 username, password 외 추가적 정보를 보내는 경우 추가적 정보를 저장하고 참조하여 사용할 수 있게 하는 클래스가 WebAuthenticationDetails AuntheticationDetailsSource가 WebAuthenticationDetails 클래스를 생성한다. 동작과정 AuthenticationFilter가 Authentication객체 생성 Authent..

28.CustonLoginPage

Spring Security 에서 제공하는 것이 아닌 직접 만든 LoginPage로 옮기기위한 작업을 진행한다. 로그인 페이지를 생성하고, url을 맵핑하고, 컨트롤러를 만들어 넘긴다. LoginPage 이동을 위한 컨트롤러. import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class LoginController { @GetMapping(value = "/login") public String login(){ return "user/login/login"; } } 제공할 로그인 페이지 (Thymeleaf) . Bootstrap..

27.인증구현, CustomAuthenticationProvider

CustomUserDetailsService , CustomUserDetails 를 만들어 아이디에 맞는 유저를 찾아 권한을 주는 작업을 마쳤다면, 다음과정은 실질적인 인증이다. 즉 , AuthenticationProvider를 구현하여 앞서 구현했던 CustomUserDetailsService, CustomUserDetails 와 같이 동작하게끔 하는 과정이다. 실질적 인증을 위해 필요한 것은 구현객체 생성과, 등록이다. AuthenticationProvider 구현 앞서 필요했던 PasswordEncoder , UserDetailsService 를 주입받았다. Authentication authenticate : 실질적 인증과정을 구현 boolean supports : 해당 Authentication..

26.인증 프로세스 구현, CutonUserDetailsService

AuthenticationManager는 UsernamePasswordAuthenticationFilter 에게 호출되어 인증을 AuthenticationProvider 에게 위임한다. 이때 AuthenticationProvider 가 사용하는 객체는 UserDetailsService, UserDetails 객체이다. 각각 유저의 세부정보를 가져오는 역할과 유저정보를 가지고 있는 역할을 한다. DB를 연동하여 이를 사용하려면 UserDetailsService와 UserDetails의 구현은 불가피한 듯 하다. 일단 흐름대로 가보면 UserDetailsService > UserDetails > AuthenticationProvider 순. UserDetailsService 의 구현부터 들어간다. 보면, B..

26.PasswordEncoder

비밀번호의 암호화를 제공함 평문 지원기능은 Spring5 에서 Deprecated 됨 생성 : PasswordEncoderFactories PasswordEncoder passwordEncoder = PassswordEncoderFactories.createDelegatingPasswordEncoder() 여러개의 PasswordEncoder 명단에서 상황에 맞게 사용하게끔 지원하는 클래스 포멧 : {암호화알고리즘} 기본 포멧은 Bscrypt 로 가장 많이 쓰임 {bcrypt}~~~~ 의 형식으로 인코딩 PasswordEncoder 인터페이스의 메서드 encode(password) : 패스워드의 암호화를 진행 boolean matches(rawpassword, encodedPassword) : 평문 값과..

25.정적 자원 관리 - WebIgnore 설정

WebIgnore Client 의 Request 후 Server 의 SpringSecurity 작동 js / css / image 파일 등의 정적자원에 대해 SpringSecurity는 보안을 검사하고 있음 사실상 정적 자원은 보안필터를 거칠 필요가 없는 경우가 많음 즉, 보안을 적용하지 않는 리소스를 설정하는 방법이다! 어떻게 설정하는가. 스프링 시큐리티 설정클래스에서 재정의 configure(WebSecurity web) web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); // 정적자원에 대한 경로 요청경로에 대해서 보안을 하지 않는다. @Override public void configure(WebS..