我们有两种登录方式:
用户名和密码通过请求头由另一个应用程序发送。IT进行检查,如果用户名和密码正确,则进入[A为此编写了自定义过滤器]
如果请求头中没有用户名和密码,则呈现登录屏幕。
当请求头中存在用户名和密码但出现错误时,会显示一个HTTP状态401-身份验证失败:错误的凭据页面。
如何在身份验证失败时显示登录页面?
下面是security.xml中的代码。
如何在身份验证失败时显示登录页面?
下面是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);
}
}
requestHeaderFilter
实现的方式。答案中提到的类展示了一种实现方式。 - Raghuram