3

我们正在使用 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_马耳他

4

1 回答 1

1

作为服务器,我们使用基于 Tomcat 6.0.29 的自定义服务器。

您首先需要验证问题是否与您的 Tomcat 服务器的配置有关(例如,是否设置了 Tomcat 身份验证,是否希望您提供客户端证书(clientAuth="true"在您的 Tomcat 服务器配置中)等。

如果您可以验证控件是否通过了 Spring Security 的初始 Tomcat 身份验证,那么可能会有不同的解决方案。您尚未向我们提供所有相关代码,但看起来代码正在检查要与身份验证请求一起传递的附加表单参数。这将在WebConstants.PARAM_J__TYPE常量中定义。

于 2011-03-24T17:04:08.140 回答