gpt4 book ai didi

spring - global-method-security 适用于某些 bean,但不适用于其他使用 spring security

转载 作者:行者123 更新时间:2023-12-04 06:25:51 24 4
gpt4 key购买 nike

我有服务,

   <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>

最佳答案

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

所以你可以做的是:

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


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

    关于spring - global-method-security 适用于某些 bean,但不适用于其他使用 spring security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053280/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com