Spring Security-如何在非安全页面中获取经过身份验证的对象?

时间:2019-02-11 02:04:15

标签: spring-boot spring-security thymeleaf

我有一个带有两个端点的Spring-boot / Thymeleaf应用程序:

1:/ int / :需要sso / authorization; 2. / ext / :公开页面,每个人都可以访问;

使用PreAuthenticationFilter,我可以保护/ int / *页面。当用户尝试访问/ ext / *页面时,我希望能够在控制器中告知该用户先前是否已通过身份验证(通过访问安全页面)。当前,我将经过身份验证的Principal对象保存在UserDetailsS​​ervice的loadUserDetails()中的HTTP会话中。只是好奇这是否是正确的方法(或更好的方法)。

1 个答案:

答案 0 :(得分:0)

您可以通过@AuthenticationPrincipal批注获取经过身份验证的对象,而不是从httpsession获取该对象并将其转换回每种控制器方法的对象。

让我给你一个例子,给定登录页面是公共页面,用户对象如下:

用户类别:

public class User implement UserDetails {
    String contact;
    Integer age;
}

控制器:

@GetMapping(value = "/login")
ModelAndView login(@AuthenticationPrincipal User user) {
    if (user == null) {
        return new ModelAndView("/login");
    } else {
        return new ModelAndView(new RedirectView("/home"));
    }
}