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

ste*_*eve 27 spring spring-security

我是Spring的新手:

我不希望经过身份验证的用户访问登录页面.如果用户已经过身份验证,那么处理'/ login'重定向的正确方法是什么?说,如果已经登录,我想重定向到'/ index'.

我在登录时尝试了'isAnonomous()',但它重定向到访问被拒绝的页面.

<security:http auto-config="true" use-expressions="true" ...>
    <form-login login-processing-url="/resources/j_spring_security_check"
                 default-target-url="/index"
                login-page="/login" authentication-failure-url="/login?login_error=t" />
    <logout logout-url="/resources/j_spring_security_logout"  />
   ...
  <security:intercept-url pattern="/login" access="permitAll" />
  <security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
Run Code Online (Sandbox Code Playgroud)

Rah*_*hul 49

在您的登录页面的控制器功能中:

  1. 检查用户是否已登录.

  2. 然后在那种情况下将他转发到索引页面.

相关代码:

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

if (!(auth instanceof AnonymousAuthenticationToken)) {

    /* The user is logged in :) */
    return new ModelAndView("forward:/index");
}
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于登录 - > home等情况.如果我已登录并在地址栏中输入登录URL怎么办?重新定向到主页(或我已经在哪里)是有意义的... (4认同)

Mil*_*vic 8

要成功从登录页面重定向,如果用户已登录,请将以下内容添加到login.jsp:

将安全标记库标题添加到jsp的顶部:

<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>
Run Code Online (Sandbox Code Playgroud)

然后在"head"标签内添加以下标签(最好在顶部附近):

<sec:authorize access="isAuthenticated()">
    <% response.sendRedirect("main"); %>
</sec:authorize>
Run Code Online (Sandbox Code Playgroud)

如果访问登录页面的用户已经登录,这将重定向到main.html(或者您的主要.jsp映射到的任何内容).

通过控制器执行此操作对我不起作用,因为有效的登录页面练习是让spring security的"form-login"bean执行所有重定向工作,因此没有登录控制器供我修改.