SpringSecurity
-
@RequiredArgsConstructor를 사용 못하는 경우개발/Spring 2023. 12. 24. 01:13
같은 타입의 빈을 복수로 정의했을 때는 모호성 에러가 발생하는데 이 때 생성자를 직접 정의해 객체를 주입할 때 @Qualifier를 사용해서 컴포넌트를 명시한다. public SecurityConfig( CustomUserDetails customUserDetails, PasswordEncoder passwordEncoder, AuthenticationDetailsSource authenticationDetailsSource, @Qualifier("customAuthSuccessHandler") AuthenticationSuccessHandler successHandler, @Qualifier("customAuthFailureHandler") AuthenticationFailureHandler failu..
-
[Spring Security5] Config에서 defaultSuccessUrl(), successHandler()의 순서 문제개발/Spring 2023. 12. 22. 16:58
successHandler()를 호출한 뒤에 defaultSuccessUrl()을 호출하니까 customSuccessHandler가 호출되지 않는 문제점이 있었다. 호출이 안 될 리 없지만 호출이 안 돼서 defaultSuccessUrl()을 들여다보니 다음과 같은 부분이 있었다. 자체적으로 successHandler()에 SavedRequestAwareAuthenticationSuccessHandler 핸들러를 넘기고 있었다. 그렇기 때문에 defaultSuccessUrl()을 호출하고 나서 successHandler()을 호출해야 한다.
-
[Spring Security5] SecurityContext에 가졌던 작은 오해개발/Spring 2023. 12. 18. 16:01
- 익명 사용자든 인증된 사용자든 매 요청 때마다 인증 객체(authentication)가 생성됨 - 인증 객체는 SecurityContext에 저장됨 - 익명 사용자의 요청일 때는 SecurityContext 객체를 만들어야 하지만, 인증 사용자는 Session에서 가져오기 때문에 미생성 - 인증 사용자는 SecurityContext 객체를 Session에 저장하지만, 익명 사용자는 Session에 저장하지 않음 - 각 요청마다 ThreadLocal이 만들어지고 SecurityContext는 각 ThreadLocal에 저장 - 이를 전역적으로 관리하는 SecurityContextHolder도 ThreadLocal에서 생성 - 이 안에서 ThreadLocal을 key, SecurityContext 객체를..
-
[Spring security5] 인증/인가에 대한 간략한 흐름개발/Spring 2023. 12. 16. 18:52
인증을 하지 않은 채로(로그인을 하지 않은 채로) 특정 자원에 접근하려고 한다면, 스프링 내부에선 어떤 흐름이 전객되는지 살펴보자. 루트 페이지로 접근했을 때의 과정이다. 1. 인가 실패이지만 익명 사용자는 조금 다른 로직을 거치게 된다 2. sendStartAuthentication() 실행 여기서 중요한 점은 reqeustCache 객체에 request를 저장한다는 점이다. 이는 인증과 인가에 성공했을 때 원래 접근하려던 url로 이동하게 하기 위함이다. saveRequest 함수 안에서 DefaultSavedRequest 객체를 만들어 해당 세션에 저장하게 되는데, savedRequest 객체 안에 요청 url이 저장되어 있다. 이는 로그인 성공 이후에 successHandler에서 이용한다. 그리..
-
[Spring Security] static resource와 로그인 성공 후 error page에 관해개발/Web 2020. 10. 8. 13:51
스프링 부트: 2.3.4 스프링 시큐리티: 5.3.4 커스텀 로그인 페이지를 만들었는데 css가 먹지 않은 페이지가 떴습니다. /css(resources/static/css)가 적용되지 않은 것이고 경로 문제가 없었기 때문에 css에 접근을 못하면 루트(static) 밑에 있는 다른 폴더와 파일에도 접근을 못할 겁니다. 해당 경로에 접근할 수 없어 생기는 문제이기 때문에 이를 허용하는 코드를 넣습니다. 구글링을 하다 보면 위 코드 대신에 아래와 같은 방법도 가능하다고 나오는데요. 두 번째 코드는 권장하지 않습니다. 스프링이 static resource를 제대로 찾지 못하는 문제입니다. 이런 경우, 로그인을 성공해도 리다이렉트 URL에 error url이 들어오면서 다음과 같은 오류 페이지가 나옵니다. s..