global-method-security适用于某些bean,但不能使用spring安全性

时间:2011-05-19 02:58:24

标签: spring annotations spring-security

我有一项服务,

   <bean id="myservicie" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
            <property name="service" ref="aService"/>
            <property name="serviceInterface" value="com.statestr.oms.fx.ws.service.IService"/>
   </bean>  

在这个服务中,

   @Secured ({"ROLE_USER"})
   private void mythod(),

但它不起作用,

但是,如果我将此方法移动到另一个bean,例如mybean,安全注释将起作用,

我已经在下面的配置中启用了两个,有人可以帮忙吗?谢谢。

   <global-method-security   secured-annotations="enabled" access-decision-manager-ref="accessDecisionManager">
        <protect-pointcut expression="execution(* *..com.statestr.oms.service.impl.*Mybean*.*(..))" access="ROLE_USER"/>
        <protect-pointcut expression="execution(* *..com.statestr.oms.service.impl.*Service*.*(..))" access="ROLE_USER"/>
   </global-method-security>

1 个答案:

答案 0 :(得分:3)

我想这是因为您的应用程序使用Spring Proxy AOP。如果直接调用该方法(来自同一个bean),则此AOP样式没有影响。我认为这就是你所做的,因为你提到的方法是私有方法。

所以你可以做的是:

  • 使用AspectJ(我强烈推荐),
  • 将@Secured注释放到从bean外部调用的方法

无论如何,您的配置看起来有点奇怪 - 为什么您对同一个类使用@Secured AND <protect-pointcut...?其中一个应该就够了。