添加属性到通配符Requestmapping路径?

时间:2016-01-10 20:52:07

标签: spring spring-security

有没有办法将属性添加到某个用户的所有路径? 即我试图在管理员可以访问的所有页面上访问当前登录的管理员,但我不想将此属性添加到每个控制器。

像这样的东西,我不需要返回任何东西:

@RequestMapping(value = {"admin/**"}, method = RequestMethod.GET)
    public void adminPaths(ModelMap model) {
        model.addAttribute("user", getPrincipal());
    }

2 个答案:

答案 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方法之前在同一个控制器中调用。

对于真正的通配符匹配,您可以同时在方法上使用ControllerAdviceModelAttribute。如下所示:

@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