[英]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.