我有多个模板,但是总而言之,我需要知道用户是否已通过身份验证,或者不知道是否显示访问按钮或退出。
当前,在每个控制器中,我必须将用户实体的对象发送到模板的数据模型,但这意味着在所有控制器上初始化用户服务。
有什么方法可以拦截控制器并将用户实体自动注入模型中,而不会影响每个控制器中模型的正常使用?
我目前知道可以使用方面拦截器从类和函数中控制控制器的使用,但是我不知道如何拦截“模型”参数并将其填充实体。 / p>
答案 0 :(得分:1)
您可以将@ControllerAdvice
与@ModelAttribute
一起使用。只需创建一个这样的类:
@ControllerAdvice
public class ModelAttributesForEveryController {
private UserService userService;
@Autowired
public ModelAttributesForEveryController(UserService userService) {
this. userService = userService;
}
@ModelAttribute("userEntity")
public String userEntity() {
// Here goes your logic to get the User entity
return theUserEntity;
}
@ModelAttribute("isLoggedIn")
public String isLoggedIn() {
// Here goes your logic to determine if logged in or not
return isLogged;
}
然后,您可以像其他任何属性一样在模板中使用名为{strong> userEntity 的model attribute
例如,使用 isLoggedIn 模型属性(一个非常虚拟的示例):
<button th:if="${isLoggedIn}"> Exit</button>
<button th:if="${!isLoggedIn}"> Sign In</button>
答案 1 :(得分:0)
如果只需要知道身份验证状态,可以将thymeleaf-extras-springsecurity5
依赖项添加到项目中,然后可以使用sec:authorize="!isAuthenticated()"
来检查是否已登录。