Spring安全性——从Tomcat 6部署到Tomcat 7时凭证错误



我有一个使用Spring Security进行身份验证的web应用程序。在Tomcat 6中工作正常。根据业务需求的变化,我不得不将它部署到Tomcat 7上,但现在无法正常工作。

spring-security.xml(为简单起见,我更改了查询)

<form-login login-page="/redirect" 
        login-processing-url="/submitLogin" 
        username-parameter="j_username" 
        password-parameter="j_password" 
        authentication-failure-handler-ref="loginFailureHandler" 
        authentication-success-handler-ref="loginSuccessHandler" />
 <authentication-manager>
    <authentication-provider>
        <jdbc-user-service 
            data-source-ref="sybaseDataSource" 
            users-by-username-query="SELECT distinct EnterpriseID as username, 'password' as password, 1 as enabled FROM users where id = ?" 
            authorities-by-username-query="SELECT ? as id, 'ROLE_USER' as authority" 
           <!-- I know, it shouldnt be like this, just for the sake of the user having an authority -->
        />
    </authentication-provider>
</authentication-manager>
这实际上是一个重定向,其中填充了用户和密码,并使用javascript(jquery)提交了表单
                <form method="POST" action="/submitLogin" id="login-form-sso"> 
                <input type="text" name='j_username' value="${user}"/>
                <input type="text" name='j_password' value="password"/>
            </form>
       $(document).ready(function(){
        $("#login-form-sso").submit();
    });

在Tomcat 7中部署时,它总是转到loginFailureHandler。调试后,我注意到Spring security没有"看到"用户名,而是试图使用"

"用户进行查询。
    org.springframework.jdbc.core.JdbcTemplate , Executing prepared SQL statement [SELECT distinct EnterpriseID as username, 'password' 
org.springframework.jdbc.datasource.DataSourceUtils , Fetching JDBC Connection from DataSource
org.springframework.jdbc.datasource.DataSourceUtils , Returning JDBC Connection to DataSource
org.springframework.security.provisioning.JdbcUserDetailsManager , Query returned no results for user ''
org.springframework.security.authentication.dao.DaoAuthenticationProvider , User '' not found
org.springframework.beans.factory.support.DefaultListableBeanFactory , Returning cached instance of singleton bean 'sessionRegistry'

同样,这在Tomcat 6中工作得非常好。我还检查了JSP表单,它确实包含用户凭据,由于某种原因,看起来Spring安全无法找到它。

谁能告诉我正确的方向?谢谢你的建议。由于

UPDATE:我认为过滤器链上的一个过滤器是罪魁祸首,它从请求体中消费参数。

我们经历了同样奇怪的行为。我们从表单中只收到空值。

结果是在解释server.xml-File中的Connector-Configuration中的maxpostsize参数时发生了变化。从Tomcat Version 7.0.63开始,maxPostSize="0"确实被解释为最大Postsize为零字节。直到7.0.63版本maxPostSize="0"表示无限的最大投递大小。设置maxPostSize="-1"在我们的例子中解决了这个问题。

也许这个答案可以帮助某人…

经过几天的谷歌搜索,痛苦的调试,创建自定义过滤器和tomcat配置,我注意到我所有的表单都不工作,我的控制器都得到NULL值。

我尝试了另一个版本的Tomcat(我有apache-tomcat-7.0.64并下载了apache-tomcat-7.0.47),它工作了。

问题解决了。保存工作。

相关内容

最新更新