Spring Security注释不一致?

时间:2012-10-05 11:33:14

标签: spring security spring-mvc spring-security

我注意到在我的代码中,我可以使用@Secured(“ROLE_ADMIN”)和@RolesAllowed(“ROLE_ADMIN”)成功地在服务类(@Service)上注释方法。有用。但是,当我将相同的注释移动到控制器类(@Controller)时,只有@Secured被激活而@RolesAllowed被忽略。我用

配置了我的root applicationContext
<security:global-method-security 
          jsr250-annotations="enabled" 
          secured-annotations="enabled"/>

为什么@RollesAllowed不适用于@Secured的控制器类?

2 个答案:

答案 0 :(得分:1)

@RolesAllowed在服务级别(但不在控制器中)工作的原因是由于我的配置错误。为了使它工作,我不得不在扫描控制器的同一配置文件(上下文)中声明global-method-security。例如:

<context:component-scan base-package="mrpomario.springcore.mvc.controller"/>
<security:global-method-security 
          jsr250-annotations="enabled" 
          secured-annotations="enabled"/>

答案 1 :(得分:1)

不能保证混合不同的注释会产生一致的行为。

来自the manual

  

您可以在同一个应用程序中启用多种类型的注释,但是任何接口或类只应使用一种类型,否则行为将无法明确定义。如果找到适用于特定方法的两个注释,则只应用其中一个注释。