Login spring安全性在登录时停留在单个url上

Login spring安全性在登录时停留在单个url上,login,spring-security,Login,Spring Security,这是我的案子 当用户第一次登陆网站时,他们会指向登录页面。当他们成功登录时,他们将看到另一个具有相同url的页面(http://ex.com/ 但是,当他们在其他选项卡上打开站点时(http://ex.com)他们将返回到登录页面 如何使用spring security在我的站点中实现此案例 处理传统的servlet很容易,我只需要2个方法(doGet用于显示登录页面,doPost用于验证用户,如果它有效,它将调用另一个视图) 以下是我的配置: <security:http auto-co

这是我的案子

当用户第一次登陆网站时,他们会指向登录页面。当他们成功登录时,他们将看到另一个具有相同url的页面(http://ex.com/

但是,当他们在其他选项卡上打开站点时(http://ex.com)他们将返回到登录页面

如何使用spring security在我的站点中实现此案例

处理传统的servlet很容易,我只需要2个方法(doGet用于显示登录页面,doPost用于验证用户,如果它有效,它将调用另一个视图)

以下是我的配置:

<security:http auto-config="true">        
    <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />                
    <security:form-login login-page="/login"
                         login-processing-url="/loginProcess" 
                         default-target-url="/login"
                         authentication-failure-url="/login?login_error=1" />
    <security:logout logout-url="/logout" logout-success-url="/logoutSuccess" />
</security:http>

**已编辑(删除不相关的答案)

您似乎需要使用Spring Security添加并发会话管理。请参阅以下链接:

您可以插入SessionRegistry并查看主体是否已登录。如果已登录,请调用expireNow()

或者,您可以在FilterChainProxy中的SessionManagementFilter上或之前实施筛选器:

SessionManagementFilter根据SecurityContextHolder的当前内容检查SecurityContextRepository的内容,以确定用户在当前请求期间是否已通过身份验证,通常是通过非交互式身份验证机制,如预身份验证或记住我[19]。如果存储库包含安全上下文,则筛选器不执行任何操作。如果不包含安全上下文,并且线程本地SecurityContext包含(非匿名)身份验证对象,则筛选器假定它们已通过堆栈中以前的筛选器的身份验证。然后,它将调用配置的SessionAuthenticationStrategy。 -

**已编辑(删除不相关的答案)

您似乎需要使用Spring Security添加并发会话管理。请参阅以下链接:

您可以插入SessionRegistry并查看主体是否已登录。如果已登录,请调用expireNow()

或者,您可以在FilterChainProxy中的SessionManagementFilter上或之前实施筛选器:

SessionManagementFilter根据SecurityContextHolder的当前内容检查SecurityContextRepository的内容,以确定用户在当前请求期间是否已通过身份验证,通常是通过非交互式身份验证机制,如预身份验证或记住我[19]。如果存储库包含安全上下文,则筛选器不执行任何操作。如果不包含安全上下文,并且线程本地SecurityContext包含(非匿名)身份验证对象,则筛选器假定它们已通过堆栈中以前的筛选器的身份验证。然后,它将调用配置的SessionAuthenticationStrategy。 -


我认为您的配置有问题

<security:http auto-config="true">        
    <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />                
    <security:form-login login-page="/login"
                         login-processing-url="/loginProcess" 
                         default-target-url="<home-page-url. ex: /home>"
                         authentication-failure-url="/login?login_error=1" />
    <security:logout logout-url="/logout" logout-success-url="/logoutSuccess" />
</security:http>
如果会话中没有经过身份验证的用户,控制器将返回登录页面,但一旦用户登录,它将返回另一个页面


Spring security将缓存用于用户会话的日志,并且可以使用
SecurityContextHolder

检索它。我认为您的配置有问题

<security:http auto-config="true">        
    <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />                
    <security:form-login login-page="/login"
                         login-processing-url="/loginProcess" 
                         default-target-url="<home-page-url. ex: /home>"
                         authentication-failure-url="/login?login_error=1" />
    <security:logout logout-url="/logout" logout-success-url="/logoutSuccess" />
</security:http>
如果会话中没有经过身份验证的用户,控制器将返回登录页面,但一旦用户登录,它将返回另一个页面


Spring security将缓存用于用户会话的日志,并且可以使用
SecurityContextHolder

检索该日志。不,我的问题不是Spring如何与ajax交互。但更可能的是,如何使url保持在一种模式上。请再次阅读我的问题。谢谢:)这一定是个错误。我一定是在回答另一个问题。我的回答与问题完全不符。我的错。我需要找到那个问我要回答的问题的帖子:)第一个标签的会话必须仍然有效。但第二个选项卡将指向登录页面。当他们尝试使用相同的用户名登录时,它将被抛出。我明白了。因此,无论用户名和密码是否正确,第二个选项卡将仅显示登录页面。基本上,用户在第一个选项卡上被卡住了。如果他们在登录时关闭浏览器会发生什么?他们将如何注销,因为当你打开一个标签时,它会显示登录页面,无论你做什么,你仍然会在登录页面是的,你是对的。本案旨在阻止这种行为。用户必须等待会话无效。你知道如何在春季实施吗?实际上,我将代码从传统的servlet重写到spring。使用servlet非常容易。不,我的问题不是spring如何与ajax交互。但更可能的是,如何保持url停留在一种模式上。请再读一遍我的问题。谢谢:)这一定是个错误。我一定是在回答另一个问题。我的回答与问题完全不符。我的错。我需要找到那个问我要回答的问题的帖子:)第一个标签的会话必须仍然有效。但第二个选项卡将指向登录页面。当他们尝试使用相同的用户名登录时,它将被抛出。我明白了。因此,无论用户名和密码是否正确,第二个选项卡将仅显示登录页面。基本上,用户在第一个选项卡上被卡住了。如果他们在登录时关闭浏览器会发生什么?他们将如何注销,因为当你打开一个标签时,它会显示登录页面,无论你做什么,你仍然会在登录页面是的,你是对的。本案旨在阻止这种行为。用户必须等待会话无效。你知道如何在春季实施吗?实际上,我将代码从传统的servlet重写到spring。使用servlet真的很容易。你能检查一下当在新标签页中打开站点时cookies是否被发送回服务器吗。您使用的是哪种浏览器?一定是饼干出了问题。
JSESSIONID
cookie的expires值是多少?对不起,我不理解