专注JavaWeb开发 首页制式『默认式 OR 时间轴 网站地图|RSS订阅|设为首页|加入收藏
当前位置:首页 >Java >JavaEE中级 > 正文

Shiro采用@RequiresPermissions没有执行doGetAuthorizationInfo解决之道

作者: 紫寒1120 发布时间: 2016-06-06 浏览次数:

Shiro采用@RequiresPermissions没有执行doGetAuthorizationInfo解决之道

前几天在升级框架的时候,使用了标签注入的方式添加shiro的权限.但是没有执行AuthorizingRealm doGetAuthorizationInfo方法. 按照网上的办法,也没有解决掉,后来查看官网,解决办法如下:

添加依赖的包:

<dependency>

 <groupId>org.aspectj</groupId>

 <artifactId>aspectjrt</artifactId>

 <version>1.6.11</version>

</dependency>

<dependency>

 <groupId>org.aspectj</groupId>

 <artifactId>aspectjweaver</artifactId>

 <version>1.6.12</version>

</dependency>

<dependency>

 <groupId>cglib</groupId>

 <artifactId>cglib</artifactId>

 <version>2.2.2</version>

</dependency>

springMVC的配置文件中加入:

<!--采用注入式shrio权限管控 -->

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

  <property name="exceptionMappings">

   <props>

      <prop key="org.apache.shiro.authz.UnauthorizedException">/template/front/404</prop>

      <prop key="java.lang.Throwable">/template/front/500</prop>

    </props>

  </property>

  <property name="statusCodes">

   <props>

    <prop key="500">500</prop>

    <prop key="404">404</prop>

    <prop key="403">403</prop>

  </props>

 </property>

<property name="warnLogCategory" value="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" />

 <property name="defaultErrorView" value="/template/front/500" />

   <property name="defaultStatusCode" value="200" />

</bean>

<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">

 <property name="securityManager" ref="securityManager" />

</bean>

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">

  <property name="proxyTargetClass" value="true" />

</bean>

如果没有效果,可以参考下其他网站的方案,我的没有效果:

在使用Shiro框架进行项目整合时,使用注解在使用Shiro框架进行项目整合时,使用注解在使用Shiro框架进行项目整合时,使用注解@RequiresPermissions为方法提供是需要的权限,但是根本没有进行验证,后面发现在自己的Realm中只执行了doGetAuthenticationInfo(登录验证)方法而没有执行doGetAuthorizationInfo(权限验证)的方法。

查看相关资料后发现是因为在Springmvc的配置文件中(我的名字是spring-servlet.xml)没有加入

<aop:config proxy-target-class="true"/>

加入后解决问题.

貌似也可以使用:

<!-- 支持Shiro对Controller的方法级AOP安全控制 begin-->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
<property name="proxyTargetClass" value="true" />
</bean>
<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

但是一定要记住是把这些配置放在     SpringMvc的配置文件中。


QQ群: 武汉地区(142173356)验证消息JavaWeb1024

网友共有【】评论,点击查看



x 微信关注我们 随时获取最新网站资讯