是否可以以横向方式将对象注入模板?

时间:2019-12-08 04:42:33

标签: spring-boot thymeleaf

我有多个模板,但是总而言之,我需要知道用户是否已通过身份验证,或者不知道是否显示访问按钮或退出。

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

有什么方法可以拦截控制器并将用户实体自动注入模型中,而不会影响每个控制器中模型的正常使用?

我目前知道可以使用方面拦截器从类和函数中控制控制器的使用,但是我不知道如何拦截“模型”参数并将其填充实体。 / p>

2 个答案:

答案 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()"来检查是否已登录。