spring-boot - 是否可以以横向方式将对象注入模板?
问题描述
我有多个模板,但总而言之,我需要知道用户是否经过身份验证才能知道是显示访问按钮还是退出。
目前在每个控制器中,我必须将用户实体的对象发送到模板的数据模型,但这意味着在所有控制器上初始化用户服务。
有没有什么办法可以拦截控制器,自动将用户实体注入到模型中而不影响模型在各个控制器中的正常使用?
我目前知道可以使用切面拦截器从它们的类和它们的函数中控制控制器的使用,但我不知道如何拦截“模型”参数并用实体填充它。
解决方案
你可以使用@ControllerAdvice
with @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>
推荐阅读
- azure - 如何通过 Visual Studio 2019 在 Azure Functions 中渲染 Razor 页面?
- python - 在多部分 html 电子邮件中嵌入图像 - 正确定义链接的图像
- c# - Asp.Net Core 3.1 数据被检索但未保存到数据库中
- android - react-native 如何使用链接打开本地文件 url?
- jquery - 如何从动态填充的表格中获取可点击单元格的数据
- amazon-web-services - 当消息被添加到 SQS 时,仅向 lambda 发送事件主体而不是整个事件
- ios - 我如何知道 NFC 护照芯片读取了哪个数据组?
- node.js - npm package.json 别名,例如 webpack
- python - 理解将月份名称映射到其数值的字典
- c# - 如何从自定义基础项目创建 ASP.NET Core MVC 样板