我在Karaf 4.0.4上运行OSGI应用程序。 此应用程序不是Web应用程序。
我配置了Apache Shiro,以便使用使用存储在SQL数据库中的凭据的自定义SecurityRealm
进行登录。使用Blueprint配置SecurityManager
和领域
这部分工作正常。
我想使用注释:
@RequiresPermissions("doSomething")
@RequiresRoles("admin")
public void myMethodToDoSomething() {
...
}
永远不会评估这些通知。 (我的安全领域protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals)
方法永远不会被调用。
在阅读了一些Shiro文档后,我明白它不起作用,因为我没有在Shiro Spring turorial中定义的所需拦截器:
<!-- Enable Shiro Annotations for Spring-configured beans. Only run after -->
<!-- the lifecycleBeanProcessor has run: -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
但是因为我在我的应用程序中没有使用spring,所以这些行不起作用。