Spring boot Spring安全-如何在非安全和安全页面中获取经过身份验证的对象?
我有一个Spring boot/Thymeleaf应用程序,有两个端点: 1:/int/:需要sso/授权; 2. /ext/:公共页面,每个人都可以访问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
使用预验证过滤器,我能够保护/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安全配置。