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

Spring boot Spring安全-如何在非安全和安全页面中获取经过身份验证的对象?,spring-boot,spring-security,thymeleaf,Spring Boot,Spring Security,Thymeleaf,我有一个Spring boot/Thymeleaf应用程序,有两个端点: 1:/int/:需要sso/授权; 2. /ext/:公共页面,每个人都可以访问 使用预验证过滤器,我能够保护/int/*页面。当用户尝试访问/ext/*页面时,我希望能够在控制器中告诉用户之前是否已通过身份验证(通过访问安全页面)。目前,我将经过身份验证的主体对象保存在UserDetailsService的loadUserDetails()中的HTTP会话中。只是想知道这是否是正确的方法(或更好的方法)。您可以通过@Au

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

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


使用预验证过滤器,我能够保护/int/*页面。当用户尝试访问/ext/*页面时,我希望能够在控制器中告诉用户之前是否已通过身份验证(通过访问安全页面)。目前,我将经过身份验证的主体对象保存在UserDetailsService的loadUserDetails()中的HTTP会话中。只是想知道这是否是正确的方法(或更好的方法)。

您可以通过@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"));
    }
}
控制器:

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"));
    }
}

克里斯-谢谢你花时间回复。也许我的问题不清楚。我不是问当页面通过身份验证过程(按照您建议的方式实现)时如何获取AuthenticationPrincipal,而是当用户访问/ext/*页之后的/int/*页时,AuthenticationPrincipal当前为null。我认为身份验证对象应该存储在会话中,并且即使用户稍后导航到不安全的页面,我也应该能够检索它?显示您的Spring安全配置。