我们正在使用Java和Spring开发一个网站。作为服务器,我们使用基于Tomcat 6.0.29的自定义服务器。 在web.xml文件中,声明了此自定义身份验证筛选器:
<security:custom-filter ref="extraFieldAuthenticationProvider"
before="FORM_LOGIN_FILTER"/>
以及以下内容:
<security:form-login login-page="/view/page/login"
default-target-url="/view/page/display"
authentication-failure-handler-ref="CustomAuthenticationFailureHandler"
authentication-success-handler-ref="CustomAuthenticationSuccessHandler"/>
以下是extraFieldAuthenticationProvider类:
public class ExtraFieldAuthenticationFilter
extends UsernamePasswordAuthenticationFilter {
private final static Logger LOG =
Logger.getLogger(ExtraFieldAuthenticationFilter.class.getName());
@Override
protected String obtainUsername(HttpServletRequest request) {
String userName = super.obtainUsername(request);
String type = request.getParameter(WebConstants.PARAM_J__TYPE);
return StringUtils.join(new String[]{type, userName});
}
}
问题是登录失败后,我收到Tomcat 401错误。未对CustomAuthenticationFailureHandler
进行控制。
有什么想法吗? (Bdw ......我对Spring Security比较新,我正在调试另一个人的代码)
非常感谢!
Krt_Malta
答案 0 :(得分:1)
作为服务器,我们使用的是基于Tomcat 6.0.29的自定义服务器。
首先需要验证问题是否与Tomcat服务器的配置有关(例如,是否设置了Tomcat身份验证,是否希望您在Tomcat服务器配置中提供客户端证书(clientAuth="true"
)等等。
如果您可以验证控件是否正在通过Spring Security的初始Tomcat身份验证,则可能存在不同的解决方案。您没有向我们提供所有相关代码,但看起来代码正在检查要与身份验证请求一起传递的其他表单参数。这将在WebConstants.PARAM_J__TYPE
常量中定义。