当前位置: 首页 > 面试题库 >

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

仉臻
2023-03-14
问题内容

我不希望经过身份验证的用户访问登录页面。如果用户已经通过身份验证,处理“ /登录”重定向的正确方法是什么?说,如果已经登录,我想重定向到“ / 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>

问题答案:

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

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

  2. 然后在这种情况下将他转发/重定向到索引页面。

相关代码:

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

if (!(auth instanceof AnonymousAuthenticationToken)) {

    /* The user is logged in :) */
    return new ModelAndView("forward:/index");
}

更新资料
或者在映射可以含有另一种情况path variable就像@GetMapping(path = "/user/{id}")在这种情况下,你可以实现这个逻辑,以及:

@GetMapping(value = "/login")
public String getLogin() throws Exception {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();

    if (!(auth instanceof AnonymousAuthenticationToken)) {
        User loggedInUser = userService.findByEmail(auth.getName())
                    .orElseThrow(Exception::new);
        /* The user is logged in :) */
        return "redirect:/user/" + loggedInUser.getUserId();
    }
    return "login";
}


 类似资料:
  • 问题内容: 我正在用Go编写Web服务器,并问自己,有条件隐藏HTML页面一部分的常规方式是什么。如果我只想显示一个“登录”按钮,那么当用户未登录时,我将如何实现这样的目标?它是通过模板引擎还是其他工具实现的? 感谢您抽出宝贵的时间阅读和回答这个问题:) 问题答案: 您只需为模板提供结构并管理其中的渲染。 这是一个工作示例进行测试: 要管理连接,您可以将http://www.gorillatool

  • 我使用Laravel 5.2。我想问一个问题。如何更改重定向登录表单在laravel当我们已经做登录?我使用的是来自Php artisan make: auth的auth。 我已经登录并重定向到localhost:8000/admin 然后我再次打开localhost:8000/登录。它将重定向到“/”或localhost:8000/ 我的问题是如何将“/”更改为“/”管理员“?因此,即使我已经登

  • 问题内容: 编辑:忘记提及我与AngularJs在一起仅一周了,因此,如果您看到某些东西,您认为应该做得更好,并且与问题无关,请随时在评论部分告诉我。 好的,所以我有我的身份验证控制器和提供程序,由于它们与问题范围无关,因此将不显示。然后,我有一个拦截器来检查拨打电话时用户是否已通过身份验证。如果是这样,我将请求的标头设置为包括用户的Token(如果没有),则将用户重定向到登录页面,甚至不向服务器

  • 记录器文件中的日志- org.springframework.Security.Access.event.loggerlistener-安全授权失败,原因是:org.springframework.Security.Access.accessdeniedexception:访问被拒绝;通过身份验证的主体:org.springframework.security.authentication.ano

  • springsecurity oauth2.0 谁做过记录登录日志?监听事件好像没法区分是什么原因失败的、比如client错误还是用户名错误

  • 问题内容: 如果有人在未通过身份验证的情况下尝试打其他路线,如何重定向到登录页面?在AngularJS中是否有“最佳”方法来做到这一点? 似乎是一个常见问题,但我似乎找不到解决方法。预先感谢您的帮助。 问题答案: 最好的方法是设置一个“ $ routeChangeStart”侦听器,该侦听器检查“ authProvider”服务功能以验证是否有用户登录。在我们的“ app.js”或单独的文件中: