关于OSGI的Shiro注释

时间:2016-09-15 16:30:28

标签: java osgi shiro apache-karaf

我在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,所以这些行不起作用。

1 个答案:

答案 0 :(得分:2)

您可以创建蓝图命名空间模块。然后,这可以挂钩到蓝图bean以安装拦截器。作为示例,请参阅blueprint-authz module