[SPRING] Spring Security 커스텀 인증 실패 핸들러가 매개 변수로 리디렉션
SPRINGSpring Security 커스텀 인증 실패 핸들러가 매개 변수로 리디렉션
Spring 보안 인증 실패 핸들러가 매개 변수로 리디렉션하는 데 문제점이 있습니다.
보안 설정에서 사용할 때
failureUrl("/login.html?error=true")
그것은 작동합니다. 하지만 사용자 정의 인증 실패 처리기 (아래 그림 참조)를 사용하면 항상 url / login.html을 반환합니다.
getRedirectStrategy().sendRedirect(request, response, "/login.html?error=true");
또는
response.sendRedirect(request.getContextPath() + "/login.html?error=true");
나는 틀린 것을 모른다. 왜 매개 변수가 표시되지 않습니까? error = true?
Info : Spring + JSF + Hibernate + Spring Security를 사용하고 있습니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.html")
.usernameParameter("j_username")
.passwordParameter("j_password")
.loginProcessingUrl("/j_spring_security_check")
.failureHandler(customAuthenticationFailureHandler)// .failureUrl("/login.html?error=true")//.successHandler(authSuccsessHandler)
.defaultSuccessUrl("/dashboard.html")
.permitAll()
.and()
.logout()
.invalidateHttpSession(true)
.logoutSuccessUrl("/")
.permitAll()
.and()
.exceptionHandling()
.accessDeniedPage("/access.html")
.and()
.headers()
.defaultsDisabled()
.frameOptions()
.sameOrigin()
.cacheControl();
http
.csrf().disable();
}
이것은 사용자 정의 인증 실패 처리기입니다.
@Component
public class CustomAuthFailureHandler extends SimpleUrlAuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
getRedirectStrategy().sendRedirect(request, response, "/login.html?error=true");
}
}
어떤 경우에는 매개 변수를 변경합니다.
해결법
-
==============================
1.URL /login.html?error=true에 대한 익명 액세스를 허용하지 않았으므로 로그인 페이지 (/login.html)로 리디렉션됩니다.
URL /login.html?error=true에 대한 익명 액세스를 허용하지 않았으므로 로그인 페이지 (/login.html)로 리디렉션됩니다.
AbstractAuthenticationFilterConfigurer # permitAll은 실패 URL에 대한 액세스 권한을 (모든 사용자에게) 허용하지만 사용자 정의 오류 처리기에 대해서는 허용하지 않습니다.
AbstractRequestMatcherRegistry # antMatchers를 사용하여 명시 적으로 액세스를 허용해야합니다.
ExpressionUrlAuthorizationConfigurer.AuthorizedUrl # permitAll :
AntPathRequestMatcher가 쿼리 문자열을 무시하기 때문에 정확한 URL /login.html?error=true를 허용하지 않아도됩니다.
수정 된 구성 :
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/login.html").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login.html") .usernameParameter("j_username") .passwordParameter("j_password") .loginProcessingUrl("/j_spring_security_check") .failureHandler(customAuthenticationFailureHandler)// .failureUrl("/login.html?error=true")//.successHandler(authSuccsessHandler) .defaultSuccessUrl("/dashboard.html") .permitAll() .and() .logout() .invalidateHttpSession(true) .logoutSuccessUrl("/") .permitAll() .and() .exceptionHandling() .accessDeniedPage("/access.html") .and() .headers() .defaultsDisabled() .frameOptions() .sameOrigin() .cacheControl(); http .csrf().disable(); }
from https://stackoverflow.com/questions/43838639/spring-security-custom-authentication-failure-handler-redirect-with-parameter by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] RestTemplate GET 응답이 XML에 있어야 할 때 JSON에 있어야하는 이유는 무엇입니까? (0) | 2019.03.22 |
---|---|
[SPRING] 비활성 시간이 지나면 연결이 중단됩니다. (0) | 2019.03.22 |
[SPRING] PostGIS Geometry로 Hibernate 지속 실패 (0) | 2019.03.22 |
[SPRING] Spring 배치 - 여러 작업을 병렬로 실행 (0) | 2019.03.22 |
[SPRING] SimpleUrlHandlerMapping의 Java 구성 (스프링 부트) (0) | 2019.03.21 |