У нас есть два способа входа в систему.
Имя пользователя и пароль отправляются другим приложением в заголовках запросов. Он проверяется, и если имя пользователя и пароль верны, он входит. [Для этого написан специальный фильтр]
Если имя пользователя и пароль отсутствуют в заголовках запроса, отображается экран входа в систему.
Когда имя пользователя и пароль присутствуют в заголовке запроса и если это не так, мне показывается HTTP Status 401 - Ошибка аутентификации: неверные учетные данные страница.
Как мне сделать так, чтобы страница входа отображалась в случае неудачной аутентификации?
Ниже приведен код в 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>
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Редактировать: добавление кода для фильтра RequestHeader в моем приложении
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);
}
}