在@Autowired的容器中使用@Secured注释不起作用。
@Controller
@RequestMapping("/")
public class HelloController {
@Autowired
private ApplicationContext applicationContext;
@ModelAttribute
private String test() {
// this applicationContext is null
return "test";
}
@Secured("ROLE_USER")
@RequestMapping(value = "test", method = RequestMethod.GET)
public String printWelcome(ModelMap model) {
// this applicationContext is null
model.addAttribute("message", "Hello world!");
return "hello";
}
}
我认为问题是当使用@ModelAttribute方法作为私有时,那么在运行时控制器被创建为代理对象,在这种情况下,spring依赖注入失败。访问属性applicationContext会导致NullPointerException。
我从未见过将@ModelAttribute注释方法创建为公共方法的建议(或规则)。没有@Secured注释,代码工作正常。