首页 > 解决方案 > 是否可以以横向方式将对象注入模板?

问题描述

我有多个模板,但总而言之,我需要知道用户是否经过身份验证才能知道是显示访问按钮还是退出。

目前在每个控制器中,我必须将用户实体的对象发送到模板的数据模型,但这意味着在所有控制器上初始化用户服务。

有没有什么办法可以拦截控制器,自动将用户实体注入到模型中而不影响模型在各个控制器中的正常使用?

我目前知道可以使用切面拦截器从它们的类和它们的函数中控制控制器的使用,但我不知道如何拦截“模型”参数并用实体填充它。

标签: spring-bootthymeleaf

解决方案


你可以使用@ControllerAdvicewith @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;
    }

然后您可以像使用任何其他属性一样在模板中使用该model attribute命名的userEntity

例如使用isLoggedIn模型属性(一个非常虚拟的示例):

<button th:if="${isLoggedIn}"> Exit</button>
<button th:if="${!isLoggedIn}"> Sign In</button>

推荐阅读