Spring Security: redirecionando para a página de login se a autenticação falhou
Estamos tendo duas maneiras de fazer login.
O nome de usuário e a senha são enviados por outro aplicativo nos cabeçalhos da solicitação. A TI é examinada e, se o nome de usuário e a senha estiverem corretos, ela entra. [Um filtro personalizado é gravado para isso]Se o nome do usuário e a senha não estiverem presentes nos cabeçalhos da solicitação, a tela de login é apresentadQuando o nome de usuário e a senha estão presentes no cabeçalho da solicitação e, se estiver errado, é exibido umHTTP Status 401 - Falha na autenticação: credenciais inválidas página
Como faço para mostrar a página de login, caso a autenticação falh
Abaixo é o código no security.xml
<http auto-config="true" use-expressions="true">
<access-denied-handler error-page="/login.jsp"/>
<intercept-url pattern="/*Login*" access="hasRole('ROLE_ANONYMOUS')"/>
<intercept-url pattern="/*" access="hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')"/>
<custom-filter ref="requestHeaderFilter" before="FORM_LOGIN_FILTER"/>
<form-login login-page="/login.jsp"/>
</http>
Por favor, deixe-me saber se você precisar de mais informações
Edit: Adicionando o código para o filtro RequestHeader no meu aplicativo
public class RequestHeaderProcessingFilter extends AbstractAuthenticationProcessingFilter{
private String usernameHeader = "j_username";
private String passwordHeader = "j_password";
protected RequestHeaderProcessingFilter() {
super("/login_direct");
}
//getters and setters
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
String username = request.getHeader(usernameHeader);
String password = request.getHeader(passwordHeader);
SignedUsernamePasswordAuthenticationToken authRequest =
new SignedUsernamePasswordAuthenticationToken(username, password);
return this.getAuthenticationManager().authenticate(authRequest);
}
}