簡體   English   中英

Spring Security-從Tomcat 6部署到Tomcat 7時憑據不正確

[英]Spring Security - Bad credentials when deploying from Tomcat 6 to 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>

來自jsp的表單:(實際上是重定向,其中填充了用戶名和密碼,並使用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安全性找不到它。

誰能指出我正確的方向? 感謝您的投入。 謝謝

更新:我認為過濾器鏈上的過濾器之一是元凶,它消耗了請求正文中的參數。 將進一步調查。

我們經歷了同樣的奇怪行為。 除了表格中的空值外,我們什么也沒有收到。

事實證明,在server.xml-File內的Connector-Configuration中解釋maxPostSize-Parameter時發生了更改。 從Tomcat版本7.0.63開始,maxPostSize =“ 0”確實被解釋為零字節的最大Postsize。 直到版本7.0.63 maxPostSize =“ 0”表示無限的最大postsize。 設置maxPostSize =“-1”解決了我們的問題。

也許這個答案可能會幫助某人...

經過數天的谷歌搜索,痛苦的調試,創建自定義過濾器和tomcat配置之后,我注意到我的所有表單均無法正常工作,並且我的控制器都獲得了NULL值。

我嘗試了另一版本的Tomcat(我安裝了apache-tomcat-7.0.64,並下載了apache-tomcat-7.0.47),並且可以正常使用。

問題解決了。 作業已保存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM