[SPRING] 요청 매개 변수가 작동하지 않는 인증 실패 리디렉션
SPRING요청 매개 변수가 작동하지 않는 인증 실패 리디렉션
내 자신의 성공과 인증 실패 처리기를 구성하려고합니다. 인증 실패시 요청 매개 변수를 사용하여 로그인 페이지로 다시 리디렉션하려는 경우이 매개 변수가 있으면 로그인 페이지에 오류 메시지가 출력됩니다. 그러나 오류가 발생해도 내 로그인 페이지로 다시 리디렉션되고 있지만 요청 매개 변수는 항상 null입니다.
아래 코드 :
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.html").permitAll()
.usernameParameter("username")
.passwordParameter("password")
.loginProcessingUrl("/login")
.successHandler(successHandler())
.failureHandler(handleAuthenticationFailure());
}
@Autowired
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//database checks
}
};
}
/**
* Authentication success handler defines action when successfully authenticated
* @return
*/
@Bean
public AuthenticationSuccessHandler successHandler(){
return new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest httpRequest, HttpServletResponse httpResponse, Authentication authentication)
throws IOException, ServletException {
// custom auth success here
httpResponse.setStatus(HttpServletResponse.SC_OK);
SavedRequest savedRequest = (SavedRequest) httpRequest.getSession().getAttribute("SPRING_SECURITY_SAVED_REQUEST");
httpResponse.sendRedirect(savedRequest.getRedirectUrl());
}
};
}
@Bean
public AuthenticationFailureHandler handleAuthenticationFailure() {
return new SimpleUrlAuthenticationFailureHandler() {
@Override
public void onAuthenticationFailure(HttpServletRequest httpRequest, HttpServletResponse httpResponse,
AuthenticationException authenticationException) throws IOException, ServletException {
// custom failure code here
setDefaultFailureUrl("/login.html?error=fail");
super.onAuthenticationFailure(httpRequest, httpResponse, authenticationException);
}
};
}
해결법
-
==============================
1.다음과 같이 시도해보십시오.
다음과 같이 시도해보십시오.
@Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { // ....... response.sendRedirect("/login.html?error=fail"); }
최신 정보:
"/login.html?error=fail"이 authorizeRequests () 섹션에 추가되는 것이 중요합니다. 그렇지 않으면 컨트롤러가 error 매개 변수를 선택하지 않습니다.
.antMatchers ( "/ login **")를 사용하여 .antMatchers ( "/ login"). permitAll ()을 바꾸십시오.
-
==============================
2.또한 params에 문제가있었습니다 (필자의 경우 로그인이 실패하고 params없이 로그인 페이지로 리디렉션 된 url에 요청 매개 변수가 추가됨).
또한 params에 문제가있었습니다 (필자의 경우 로그인이 실패하고 params없이 로그인 페이지로 리디렉션 된 url에 요청 매개 변수가 추가됨).
이게 내 문제를 해결했다.
.antMatchers("/login**").permitAll()
-
==============================
3.저는 스프링 부트 (spring boot)의 새로운 기능입니다. 스프링 부트 2.1.4.RELEASE를 사용한다면이 구성을 시도하십시오.
저는 스프링 부트 (spring boot)의 새로운 기능입니다. 스프링 부트 2.1.4.RELEASE를 사용한다면이 구성을 시도하십시오.
http.csrf().disable() .authorizeRequests() // URLs matching for access rights .antMatchers("/").permitAll() .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() // form login .formLogin() .loginPage("/login") .failureUrl("/login?error=true") .successHandler(sucessHandler) .usernameParameter("email") .passwordParameter("password") .and() // logout .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) .logoutSuccessUrl("/").and() .exceptionHandling() .accessDeniedPage("/access-denied");
위에서 정의한 스프링 보안 구성을 사용하려면 웹 애플리케이션에 첨부해야합니다. 이 경우 web.xml은 필요하지 않습니다.
public class SpringApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[] {SecSecurityConfig.class}; }}
즉, 자동으로 인스턴스화되는 다음 클래스를 생성합니다.
SecSecurityConfig.class : 모든 http.csrf (). disable (). authorizeRequests () ... 구성을 수행하는 클래스입니다.
출처 : https://www.baeldung.com/spring-security-login
희망이 도움이 :)
from https://stackoverflow.com/questions/42181252/authentication-failure-redirect-with-request-params-not-working by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC에서 커스텀 Accept 헤더 관리하기 (0) | 2019.05.16 |
---|---|
[SPRING] 트랜잭션 롤백이지만 레코드가 삽입됩니다. (0) | 2019.05.16 |
[SPRING] Eclipse의 Java 10 컴파일러에서 import javax.annotation. *을 확인할 수 없습니다. (0) | 2019.05.16 |
[SPRING] Spring Data JPA + Neo4j를 사용하여 교차 저장소 영속성을 올바르게 설정하는 방법은 무엇입니까? (0) | 2019.05.16 |
[SPRING] Spring / EHCache로로드 중 캐시 새로 고치기 (0) | 2019.05.16 |