global-method-security работает на некоторых bean-компонентах, но не на других с использованием Spring Security - PullRequest
2 голосов
/ 19 мая 2011

У меня есть служба,

   <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(),

, но она не работает, однако

, если переместить этот метод вскажем, другой бин, 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 Ответ

3 голосов
/ 19 мая 2011

Я думаю, это потому, что ваше приложение использует Spring Proxy AOP. И этот стиль AOP не оказывает влияния, если метод вызывается напрямую (из того же компонента). И я думаю, что это то, что вы делаете, потому что упомянутый вами метод является частным.

Итак, что вы можете сделать:

  • используйте AspectJ (я настоятельно рекомендую это),
  • помещает аннотацию @Secured в метод, который вызывается извне компонента

В любом случае, ваша конфигурация выглядит немного странно - почему вы используете @Secured И <protect-pointcut... для того же класса? Одного из них должно быть достаточно.

...