Spring Security - 从 Tomcat 6 部署到 Tomcat 7 时凭据错误

     2023-02-27     87

关键词:

【中文标题】Spring Security - 从 Tomcat 6 部署到 Tomcat 7 时凭据错误【英文标题】:Spring Security - Bad credentials when deploying from Tomcat 6 to Tomcat 7 【发布时间】:2015-12-29 04:50:43 【问题描述】:

我有一个使用 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 安全“看到”,试图用 ''

的用户进行查询
    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 安全性找不到它。

谁能指出我正确的方向?感谢您的意见。 谢谢

更新:我认为过滤器链上的过滤器之一是罪魁祸首,消耗了请求正文中的参数。将进一步调查。

【问题讨论】:

你的 Spring-security 版本是什么?你有休眠功能吗? 弹簧安全 3.2.2,瓷砖 2.2.2。没有休眠。 我有一些 XML 代码将引用一个 Java 文件,您可以在那里编写您的 findByUsername(String email) 方法。这可能对你有用。如果你有休眠,这将是有益的,因为这需要用户对象。如果你想要它,让我知道。 浏览器上 j_username 的视图源是什么?我 value='' 被通过了?检查浏览器上的 HTTP 手表。尝试删除 value=$user 作为测试并输入用户 ID 【参考方案1】:

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

事实证明,在 server.xml-File 中的 Connector-Configuration 中解释 maxPostSize-Parameter 发生了变化。 从 Tomcat 版本 7.0.63 开始,maxPostSize="0" 确实被解释为最大 Postsize 为零字节。直到版本 7.0.63 maxPostSize="0" 表示无限的最大 postsize。 设置 maxPostSize="-1" 解决了我们案例中的问题。

也许这个答案可能对某人有所帮助......

【讨论】:

一篇很有帮助的帖子。非常感谢。你救了我的命:P【参考方案2】:

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

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

问题解决了。作业已保存。

【讨论】:

从 stark-security 升级到 spring 安全插件

】从stark-security升级到spring安全插件【英文标题】:Upgradingfromstark-securitytospringsecurityplugin【发布时间】:2011-09-1417:14:46【问题描述】:我最近将一个项目的Grails从1.0.5升级到了1.3.7。项目使用了Stark-security插件(0.4.3),我想用Spri... 查看详情

从 Spring Security 登录过程访问 HTTP 会话

】从SpringSecurity登录过程访问HTTP会话【英文标题】:AccessHTTPSessionfromSpringSecurityLoginProcess【发布时间】:2011-01-2006:26:27【问题描述】:我可以从扩展org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider的类的retrieveUser... 查看详情

Spring Security“拒绝从...执行脚本”

】SpringSecurity“拒绝从...执行脚本”【英文标题】:SpringSecurity"Refusedtoexecutescriptfrom..."【发布时间】:2014-09-0318:15:20【问题描述】:我正在我的HTML文件(thymeleaf模板)中使用SpringSecurity和Bootstrap构建一个SpringMVC应用程序。... 查看详情

从 Tomcat 6 迁移到 Tomcat 7 后 /spring_security_login Spring Security 3.2 出现 404 错误

】从Tomcat6迁移到Tomcat7后/spring_security_loginSpringSecurity3.2出现404错误【英文标题】:404Erroron/spring_security_loginSpringSecurity3.2aftermigratingfromTomcat6toTomcat7【发布时间】:2014-08-2416:22:10【问题描述】:现在已经三天了,我正在努力让我的... 查看详情

spring-security-oauth2 - 从资源服务器检查ClientDetails

】spring-security-oauth2-从资源服务器检查ClientDetails【英文标题】:spring-security-oauth2-checkClientDetailsfromResourceServer【发布时间】:2017-12-1519:51:55【问题描述】:我正在使用spring-security-oauth2-2.0.10.RELEASE开发OAuth2.0资源服务器应用程序。... 查看详情

无法从 SpEL 中找到 Spring Security 主体

】无法从SpEL中找到SpringSecurity主体【英文标题】:SpringSecurityprincipalcannotbefoundfromSpEL【发布时间】:2017-03-1015:21:04【问题描述】:我想通过JPA查询从CrudRepository获取RestResource的数据:publicinterfaceIContactRepositoryextendsPagingAndSortingReposi... 查看详情

从 Spring Security 身份验证日志中删除日志

】从SpringSecurity身份验证日志中删除日志【英文标题】:RemovingalogfromSpringSecurityauthenticationlogging【发布时间】:2018-10-1421:52:25【问题描述】:在AbstractUserDetailsAuthenticationProvider.class我们有一个方法AbstractUserDetailsAuthenticationProvider.au... 查看详情

spring security从数据库获取用户ID

】springsecurity从数据库获取用户ID【英文标题】:springsecuritygetuseridfromDB【发布时间】:2015-06-0208:15:19【问题描述】:我正在使用SpringSecurity进行身份验证,并成功地在我需要的任何地方获取User对象(org.springframework.security.core.userdet... 查看详情

从 Spring Security Expressions 调用静态方法?

】从SpringSecurityExpressions调用静态方法?【英文标题】:CallingstaticmethodsfromSpringSecurityExpressions?【发布时间】:2011-11-2623:45:06【问题描述】:我正在寻找一种方法来扩展SpringSecurityExpressions以支持现有的安全基础设施。我知道您可... 查看详情

如何从spring security获取当前登录的用户对象?

】如何从springsecurity获取当前登录的用户对象?【英文标题】:Howtogetthecurrentloggedinuserobjectfromspringsecurity?【发布时间】:2015-11-1004:33:15【问题描述】:我正在使用Spring安全版本3.1.4.RELEASE。如何访问当前登录的用户对象?SecurityCon... 查看详情

Spring-security 阻止匿名用户从 MongoDB 中提取数据

】Spring-security阻止匿名用户从MongoDB中提取数据【英文标题】:Spring-securityblockinganonymoususersfrompullingdatafromMongoDB【发布时间】:2018-04-0418:41:36【问题描述】:我有一个使用SpringSecurity的SpringBootWeb应用程序。index.html页面包含一个对... 查看详情

从 Weblogic 获取 Spring Security 的安全角色

】从Weblogic获取SpringSecurity的安全角色【英文标题】:GetSecurityRolesFromWeblogicforSpringSecurity【发布时间】:2015-04-1307:22:10【问题描述】:我目前正在编写一个位于weblogic服务器上的web应用程序。我正在使用Weblogic的安全容器来验证对... 查看详情

Spring Security 从两个实现 UserDetails 的方法中检索当前用户对象

】SpringSecurity从两个实现UserDetails的方法中检索当前用户对象【英文标题】:SpringSecurityretrievecurrentuserobjectouttwomethodsimplementingUserDetails【发布时间】:2015-03-2206:15:11【问题描述】:我正在开发一个Spring-MVC项目,我正在使用Spring-Sec... 查看详情

java示例代码_使用spring security从失败的登录中获取用户名

java示例代码_使用spring security从失败的登录中获取用户名 查看详情

如何从 Spring Security 上的 CustomUser 获取用户 ID

】如何从SpringSecurity上的CustomUser获取用户ID【英文标题】:HowtogetUserIDfromCustomUseronSpringSecurity【发布时间】:2014-05-0521:52:32【问题描述】:ussignSpringSecurity,我试图从我的CustomUserDetailsS​​ervice上的loadUserByUsername方法返回的CustomUse... 查看详情

使用 Spring Security 从 LDAP 加载组

】使用SpringSecurity从LDAP加载组【英文标题】:LoadinggroupsfromLDAPusingSpringSecurity【发布时间】:2014-08-0823:49:31【问题描述】:我需要授予属于LDAP中某个组(ABCD)的用户的访问权限。我能够使用SpringLDAP安全性成功进行身份验证,但由于... 查看详情

Spring Security:如何从委托人那里获取详细信息?

】SpringSecurity:如何从委托人那里获取详细信息?【英文标题】:SpringSecurity:Howtogetdetailsfromtheprincipal?【发布时间】:2018-03-1420:12:36【问题描述】:使用springboot和springsecurity,用户的详细信息在主体对象中可用。但它只有少数方... 查看详情

如何将凭据从 Angular 前端传递到 Spring 后端(Spring Security 的基本身份验证)

】如何将凭据从Angular前端传递到Spring后端(SpringSecurity的基本身份验证)【英文标题】:HowcanIpasscredentialsfromAngular2frontendtoSpringbackend(Basic-AuthentificationwithSpringSecurity)【发布时间】:2017-07-2713:48:48【问题描述】:我正在开发一个使... 查看详情