使用 Spring 安全性时,我想为每个正在运行的配置文件的方法定义不同的可接受角色。我遇到的问题是保护切入点定义似乎不接受上下文占位符(如果使用 access="${secured.role} 则不翻译)。如果我将安全元素放在每个 bean 配置文件中,STS 给出警告说存在多个 global-security-method 元素。我理解为什么会这样,好像我运行了两个都加载了这个的配置文件,两者都会加载。虽然如果我只运行一个配置文件(这是我的意图),只有正确的会加载。
这是我的定义:
<beans profile="security-ad">
<security:global-method-security>
<security:protect-pointcut access="ROLE_THAT_ROLE" expression="execution(* com.test.service.TestServiceImpl.testSecuredMethod(..))"/>
</security:global-method-security>
</beans>
<beans profile="security-tam">
<security:global-method-security>
<security:protect-pointcut access="ROLE_THIS_ROLE" expression="execution(* com.test.service.TestServiceImpl.testSecuredMethod(..))"/>
</security:global-method-security>
</beans>
<beans profile="security-embedded">
<security:global-method-security>
<security:protect-pointcut access="ROLE_ADMIN" expression="execution(* com.test.service.TestServiceImpl.testSecuredMethod(..))"/>
</security:global-method-security>
</beans>
有没有办法在安全定义中实现基于配置文件的角色,同时仍然让 STS 满意?这确实运行,它只是在项目中有一个错误,这对我来说是不可接受的......