2012-10-05 56 views
0

我注意到在我的代码中,我可以用@Secured(“ROLE_ADMIN”)和@RolesAllowed(“ROLE_ADMIN”)成功注释服务类(@Service)上的方法。有用。虽然,当我将相同的注释移动到控制器类(@Controller)时,只有@Secured被激活,而@RolesAllowed被忽略。我配置我的Spring Security注释不一致?

<security:global-method-security 
      jsr250-annotations="enabled" 
      secured-annotations="enabled"/> 

根的applicationContext为什么不@RollesAllowed适用于控制器类,而@Secured是什么?

+0

问题你为什么同时使用? – Woot4Moo

+0

以便我学会如何使用它们,然后可以有更多的教育意见,我会选择。你知道为什么我看到问题中解释的行为? – Pomario

+0

我认为这是因为您正在尝试使用两组相似但不相同的注释。据我记得'@ RolesAllowed'是纯粹的Spring做法,'@ Secured'特别与Spring Security绑定。 – Woot4Moo

回答

1

@RolesAllowed在服务级别(但不在控制器中)工作的原因是由于我的配置错误。为了使它工作,我必须在我的控制器扫描的相同配置文件(上下文)中声明全局方法安全性。例如:

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

这与你的问题不太一致。如果该声明在包含控制器的应用程序上下文中不可见,则根本没有任何安全注释可用。但是,你说那个人在工作,但一个人不在。 –

1

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

the manual

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