有没有办法将属性添加到某个用户的所有路径? 即我试图在管理员可以访问的所有页面上访问当前登录的管理员,但我不想将此属性添加到每个控制器。
像这样的东西,我不需要返回任何东西:
@RequestMapping(value = {"admin/**"}, method = RequestMethod.GET)
public void adminPaths(ModelMap model) {
model.addAttribute("user", getPrincipal());
}
答案 0 :(得分:0)
您可以在控制器中的方法上使用@ModelAttribute
s。方法上的@ModelAttribute
表示该方法的目的是将一个或多个模型属性添加到所有控制器方法:
@Controller
@RequestMapping("/admin")
public class AdminController {
...
@ModelAttribute
public void populateModel(Model model) {
model.addAttribute("user", getPrincipal());
// add more ...
}
...
}
控制器中的 @ModelAttribute
方法在@RequestMapping
方法之前在同一个控制器中调用。
对于真正的通配符匹配,您可以同时在方法上使用ControllerAdvice
和ModelAttribute
。如下所示:
@ControllerAdvice(annotations = Controller.class)
public class AdminPopulatorAdvice {
@ModelAttribute
public void populateModel(HttpServletRequest request, Model model) {
// examine the request
// if its path contains /admin, then add attribute
model.addAttribute("user", getPrincipal());
// add more ...
}
}
答案 1 :(得分:0)
我忘了提到我正在使用Spring安全性。
Bohuslav指出我正确的方向并最终到达:https://docs.spring.io/spring-security/site/docs/current/reference/html/taglibs.html