繁体   English   中英

使用Spring MVC成功登录后,我仍然可以返回登录页面

[英]After login successfully using Spring MVC still I can came back to login page

我是第一次使用Java和Spring MVC实现Web应用程序。 我还实现了登录功能。 但是,我正面临一个问题。

问题:成功登录后,我的对等重定向到目标页面,但是如果我在浏览器中键入登录页面,则尽管会话处于活动状态,它仍会再次显示登录页面。

理想情况下,它应该转到默认目标页面。 波纹管是我的XML设置文件。 感谢您的任何帮助。

XML配置:

 <http pattern="/resources/**" security="none" /> <http pattern="/admin/login" security="none" /> <http pattern="/admin/login/failed" security="none" /> <http pattern="/admin/login/invalidsession" security="none" /> <http auto-config="true" use-expressions="false"> <intercept-url pattern="/admin/**" access="ROLE_USER" /> <form-login login-page="/admin/login" default-target-url="/admin/student" authentication-failure-url="/admin/login/failed" /> <logout logout-success-url="/admin/login" delete-cookies="JSESSIONID" /> <session-management session-fixation-protection="newSession" invalid-session-url="/admin/login/invalidsession"> <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> </session-management> </http> <authentication-manager alias="authenticationManager"> <authentication-provider> <user-service> <user name="roul" password="roul" authorities="ROLE_USER" /> </user-service> </authentication-provider> </authentication-manager> 

回答:

在得到jgr和Paul的建议后,我终于能够完成它。 在这里,我必须修改XML配置,因为我将登录页面设置为“无”安全性。 因此,在使用以下代码获取该页面的身份验证类型时:

身份验证auth = SecurityContextHolder.getContext()。getAuthentication();

然后我变得空虚。 因此,为避免这种情况,我不得不按如下方式更改XML设置。

更新了XML Config:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd"> <security:global-method-security secured-annotations="enabled" /> <security:http auto-config="true"> <!-- Restrict URLs based on role --> <security:intercept-url pattern="/admin/login" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:intercept-url pattern="/admin/login/failed" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:intercept-url pattern="/admin/login/invalidsession" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:intercept-url pattern="/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:intercept-url pattern="/admin/**" access="ROLE_USER" /> <!-- Override default login and logout pages --> <security:form-login login-page="/admin/login" default-target-url="/admin/student" authentication-failure-url="/admin/login/failed" /> <security:logout logout-success-url="/admin/login" delete-cookies="JSESSIONID" /> <security:session-management session-fixation-protection="newSession" invalid-session-url="/admin/login/invalidsession"> <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> </security:session-management> </security:http> <security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name="roul" password="roul" authorities="ROLE_USER" /> </security:user-service> </security:authentication-provider> </security:authentication-manager> </beans> 

注意:我已引用以下URL: http : //www.springbyexample.org/examples/simple-spring-security-webapp-spring-config.html

只需向您的“ / admin / login”控制器添加一些代码,即可检查用户是否已登录。

    Authentication auth = SecurityContextHolder.getContext().getAuthentication();

    if (!(auth instanceof AnonymousAuthenticationToken))
    {
        return "redirect:/admin/student";
    }

您可以使用authenticationsuccesshandler =

这篇文章解释了如果用户登录后访问登录页面,如何重定向到主页?

<beans:bean id="authenticationSuccessHandler"
    class="com.example.spring.security.MyAuthenticationSuccessHandler">
<beans:property name="defaultTargetUrl" ref="defaultTargetUrl" />

Spring Security-如果已经登录,则重定向

使用spring security http config在您的应用程序中配置记住我的名字http://docs.spring.io/spring-security/site/docs/3.2.6.RELEASE/reference/htmlsingle/#remember-me

<http>
  ...
  <remember-me key="myAppKey"/>
</http>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM