Spring MVC + Thymeleaf:向所有模板的上下文添加变量

2022-09-02 00:52:22

如何添加“全局”变量(如用户名)以在我的模板上下文周围使用?

目前,我正在将这些显式设置为我的模板控制器中的每个ModelAndView对象。


答案 1

有几种方法可以做到这一点。

如果要将变量添加到单个控制器提供的所有视图中,可以添加带注释的方法 - 请参阅参考文档@ModelAttribute

请注意,您还可以使用相同的机制一次对多个控制器进行寻址。为此,您可以在带注释的类中实现该方法 - 请参阅参考文档@ModelAttribute@ModelAttribute@ControllerAdvice


答案 2

@ControllerAdvice为我工作:

@ControllerAdvice(annotations = RestController.class)
public class AnnotationAdvice {

     @Autowired
     UserServiceImpl userService;

     @ModelAttribute("currentUser")
     public User getCurrentUser() {
         UserDetails userDetails = (UserDetails) 
         SecurityContextHolder.getContext()
               .getAuthentication().getPrincipal();

      return userService.findUserByEmail(userDetails.getUsername());
     }
  }

推荐