Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AuthenticationProvider authenticate在IE中调用了两次,但登录失败_Java_Spring_Tomcat_Spring Security - Fatal编程技术网

Java AuthenticationProvider authenticate在IE中调用了两次,但登录失败

Java AuthenticationProvider authenticate在IE中调用了两次,但登录失败,java,spring,tomcat,spring-security,Java,Spring,Tomcat,Spring Security,我有一个带有authenticate方法的自定义AuthenticationProvider 以及代币: public class CustomAuthenticationToken extends UsernamePasswordAuthenticationToken { public CustomAuthenticationToken(ICurrentUserContext currentUser, List<GrantedAuthority> authorities)

我有一个带有authenticate方法的自定义AuthenticationProvider

以及代币:

public class CustomAuthenticationToken extends UsernamePasswordAuthenticationToken
{
     public CustomAuthenticationToken(ICurrentUserContext currentUser, List<GrantedAuthority> authorities) {
         super(currentUser.getUsername(), currentUser.getPassword(), authorities);
     }
}
当我使用Chrome、Firefox登录时,没有任何问题

在IE 8/9中,我有一个非常奇怪的问题。有时,它只调用一次方法authenticate,它将登录,一切都按预期进行。但有时,它会调用authenticate两次,并且无法登录

有人有什么线索吗

顺便说一句,我已经在Tomcat上测试过了。

请看这个

也许你必须禁用Cookie no你的Tomcat看看这个


也许你必须禁用Cookie no你的Tomcat我已经发现了问题,仔细跟踪Spring Security的调试日志。。希望这将有助于未来的人

很明显,spring安全默认在登录后迁移会话。但在IE中,它不会将身份验证cookie迁移到新会话,从而导致出现登录页面

修复很简单,可以在Spring Security xml中完成:


通过仔细跟踪Spring Security的调试日志,我发现了这个问题。。希望这将有助于未来的人

很明显,spring安全默认在登录后迁移会话。但在IE中,它不会将身份验证cookie迁移到新会话,从而导致出现登录页面

修复很简单,可以在Spring Security xml中完成:


迁移会话完全是一个服务器端过程,应该对浏览器不可见。它应该看到的只是JSESSIONID的一个新的Set Cookie头,它应该尊重它

我的最佳猜测是您看到了,这将根据浏览器如何解释重复的标题而产生不同的效果。它最初被报道是因为它与你在这里看到的东西密切相关


但是,您不能说您使用的是哪个版本的Spring Security或Tomcat始终是一个好主意:-,因此很难说清楚。迁移会话完全是一个服务器端过程,应该对浏览器不可见。它应该看到的只是JSESSIONID的一个新的Set Cookie头,它应该尊重它

我的最佳猜测是您看到了,这将根据浏览器如何解释重复的标题而产生不同的效果。它最初被报道是因为它与你在这里看到的东西密切相关

但是你不能说你使用的是哪个版本的Spring Security或Tomcat总是一个好主意:-,所以很难说清楚。

目录 快速参考 Spring安全核心插件 > 18课时固定预防-参考文件 作者:伯特·贝克维思,贝弗利·塔尔博特 版本:2.0-RC3 第18节预防 要防范会话固定攻击,请将useSessionFixationPrevention属性设置为true: grails.plugin.springsecurity.useSessionFixationPrevention=true 成功进行身份验证后,将创建一个新的HTTP会话,并将上一个会话的属性复制到该会话中。如果您通过单击某个链接启动会话,该链接是由试图入侵您的帐户的人生成的,其中包含活动会话id,则登录后您将不再共享上一个会话。您有自己的会话

既然Grails默认在URL中不包含jsessionid,那么会话固定问题就不那么严重了。请参见本JIRA问题,但使用此功能仍然是一个好主意

请注意,使用cookie会话插件时存在问题;有关更多详细信息,请参阅本期

该表显示了会话固定的配置选项

属性默认值含义 useSessionFixationPrevention true是否使用会话固定预防。 sessionFixationPrevention.migrate true是否在登录后将现有会话的会话属性复制到新会话。 sessionFixationPrevention.alwaysCreateSession false是否始终创建会话,即使请求开始时不存在会话

目录 快速参考 Spring安全核心插件 > 18课时固定预防-参考文件 作者:伯特·贝克维思,贝弗利·塔尔博特 版本:2.0-RC3 第18节预防 要防范会话固定攻击,请将useSessionFixationPrevention属性设置为true: grails.plugin.springsecurity.useSessionFixationPrevention=true 成功进行身份验证后,将创建一个新的HTTP会话,并将上一个会话的属性复制到该会话中。如果您通过单击某个链接启动会话,该链接是由试图入侵您的帐户的人生成的,其中包含活动会话id,则登录后您将不再共享上一个会话。您有自己的会话

既然Grails默认在URL中不包含jsessionid,那么会话固定问题就不那么严重了。请参见 他的JIRA问题,但使用此功能仍然是一个好主意

请注意,使用cookie会话插件时存在问题;有关更多详细信息,请参阅本期

该表显示了会话固定的配置选项

属性默认值含义 useSessionFixationPrevention true是否使用会话固定预防。 sessionFixationPrevention.migrate true是否在登录后将现有会话的会话属性复制到新会话。 sessionFixationPrevention.alwaysCreateSession false是否始终创建会话,即使请求开始时不存在会话


这没有什么意义。浏览器不应该知道任何有关会话迁移的信息,只应该看到在响应上设置了新的JSESSIONID cookie。请看一下我的单独答案,看看是否适用。因为这是为了一个特定的目的,如果你能避免禁用它就更好了。这真的没有意义。浏览器不应该知道任何有关会话迁移的信息,只应该看到在响应上设置了新的JSESSIONID cookie。请看一下我的单独答案,看看是否适用。因为这有一个特定的用途,所以最好避免禁用它。是的,但如何从这里开始。。我使用的是vFabric tc Server v2.7,Spring 3.0版本,IE显然不尊重设置的Cookie头?所有浏览器都应该尊重该头,否则它们根本无法处理Cookie。您使用的是哪个版本的Spring Security?3.0不是一个特定的版本号。您最好的选择是调试浏览器插件中的实际响应,并查看这是否适用,即您是否看到正在设置cookie,以及是否有多个标头设置同一cookie。然后在当前的tomcat版本上试用,看看它是否有效。Spring安全性:3.1.0.RELEASE,Spring 3.1.1.RELEASE。。事情是。。如果在客户Tomcat上安装,我没有选择。他/她只是想让它工作,即使是在旧的Tomcat安装上。所以与其把它当作Tomcat的问题扔掉,我宁愿看到它起作用;如果客户使用的是有bug的tomcat,那么他们应该升级。真的没有别的解决办法了。但是首先你应该检查它是否真的发生。是的,但是如何从这里开始。。我使用的是vFabric tc Server v2.7,Spring 3.0版本,IE显然不尊重设置的Cookie头?所有浏览器都应该尊重该头,否则它们根本无法处理Cookie。您使用的是哪个版本的Spring Security?3.0不是一个特定的版本号。您最好的选择是调试浏览器插件中的实际响应,并查看这是否适用,即您是否看到正在设置cookie,以及是否有多个标头设置同一cookie。然后在当前的tomcat版本上试用,看看它是否有效。Spring安全性:3.1.0.RELEASE,Spring 3.1.1.RELEASE。。事情是。。如果在客户Tomcat上安装,我没有选择。他/她只是想让它工作,即使是在旧的Tomcat安装上。所以与其把它当作Tomcat的问题扔掉,我宁愿看到它起作用;如果客户使用的是有bug的tomcat,那么他们应该升级。真的没有别的解决办法了。但是首先你应该检查它是否真的发生了。没有圣杯我的朋友:没有圣杯我的朋友:
public class CustomAuthenticationToken extends UsernamePasswordAuthenticationToken
{
     public CustomAuthenticationToken(ICurrentUserContext currentUser, List<GrantedAuthority> authorities) {
         super(currentUser.getUsername(), currentUser.getPassword(), authorities);
     }
}