폼 로그인 방식 failureUrl 지정 시 인가 처리 API 가 작동하지 않습니다.
273
작성한 질문수 3

위와 같이 failureUrl 지정하지 않았을 경우에는

이렇게 애플리케이션 홈 화면이 잘 나타납니다.
그런데

이렇게 failureUrl 을 별도로 지정해주게 되면

홈 화면에서도 인증을 요구하고 인가 처리에 대한 설정이 무시되어 버립니다.
왜 이렇게 되는 것인가요? 강의에서 이 현상에 대해서는 별 말씀 없으셔서 혼란스럽네요.
답변 1
0
네 이 부분을 확인해 보니 약간 특이한 점이 있긴 합니다.
DefaultLoginPageGeneratingFilter.javaprivate void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
boolean loginError = isErrorPage(request);
boolean logoutSuccess = isLogoutSuccess(request);
if (isLoginUrlRequest(request) || loginError || logoutSuccess) {
String loginPageHtml = generateLoginPageHtml(request, loginError, logoutSuccess);
response.setContentType("text/html;charset=UTF-8");
response.setContentLength(loginPageHtml.getBytes(StandardCharsets.UTF_8).length);
response.getWriter().write(loginPageHtml);
return;
}
chain.doFilter(request, response);
}위 코드를 보시면
if (isLoginUrlRequest(request) || loginError || logoutSuccess) {즉 분기문이 true 이면 무조건 로그인 페이지를 생성해서 클라이언트로 반환해 버리고 있습니다
위 조건에서 loginError 가 true 가 되는 상황은
formLogin(form -> form.failureUrl("/"));로 설정을 했을 경우 failureUrl 과 현재 클라이언트의 요청 url 이 동일한 경우 (여기서는 "/") 강제로 로그인 페이지를 생성해서 클라이언트로 반환해 버리고 있네요..
그래서 아래와 같이 설정했다고 하더라도
.requestMatchers("/").permitAll()DefaultLoginPageGeneratingFilter 가 먼저 로그인 페이지를 만들어서 처리해 버리니 "/" 로 가지 못하는 현상이 발생하고 있는 것 같습니다.
이 부분은 스프링 시큐리티가 강제하고 있는 것 같습니다.
그래서 만약 failureUrl 로 이동하기 위해서는
.formLogin(form -> form.failureHandler((request, response, exception) -> response.sendRedirect("/")));와 같이 핸들러를 사용하면 됩니다.
제 기억에는 핸들러를 사용하지 않고도 되었던 것 같은데 이 부분은 저도 좀 더 확인이 필요할 것 같네요
로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.
0
36
2
단원별 소스코드
0
65
2
CustomAuthenticationProvider 추가 관련 문의
0
78
2
AOP 의존성 명칭 변경
0
77
1
빈 1개 등록 시 다른 해결 방법
0
70
1
@Bean으로 AuthenticationProvider를 등록 시 http.authenticationProvider 함수를 이용해서 추가해줘야되나요?
0
87
2
OIDC의 id token에 담긴 데이터에 대해
0
78
1
loginPage("/loginPage") 질문드립니다.
0
69
1
@EnableWebSecurity
0
148
1
트랜잭션과 롤백
0
100
1
68. 인증 이벤트 - AuthenticationEventPublisher 활용 강좌 음성 문제
0
91
2
AuthenticationManager 사용 방법
0
153
2
HttpSecurity.authorizeHttpRequests() - 2 강의 부분에 대한 질문
0
108
2
spring security 6.3에서는 HttpSecurity가 만들어지기 전 WebSecurity가 먼저 만들어지는게 맞나요??
0
192
1
init(B Builder), configure(B builder) 에 대하여 질문 드립니다.
0
109
2
메타 주석 질문
0
69
1
동시세션제어 기능에서 로그아웃하기
0
152
3
로그인 후, redirect 에서 error
0
141
3
Session 생성 타이밍에 대한 질문
0
86
2
강의 참고 내용을 개발 로그로 작성해도 될지 문의드립니다.
0
135
2
customAuthentication 관련
0
132
2
authenticationManagerBuilder 주입받은거 vs 만든 거
0
114
1
UserDetailsService()에서 UserDetail이 아닌 타입을 반환할 수 있나요?
0
101
1
9:28 패턴 3의 경우 마지막으로 설정한 것만 적용되는 것 같습니다.
0
162
2





