@Autowired控制器中的@Secured不起作用

时间:2014-04-21 07:58:41

标签: java spring dependency-injection spring-security annotations

在@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注释,代码工作正常。

0 个答案:

没有答案