Spring+shiro配置JSP权限标签+角色标签+缓存

Spring+shiro,让shiro管理所有权限,特别是实现jsp页面中的权限点标签,每次打开页面需要读取数据库看权限,这样的方式对数据库压力太大,使用缓存就能极大减少数据库访问量。

下面记录下shiro配置JSP权限标签+角色标签+缓存的过程:

1首先在配置文件xml中配置securityManager。

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!--认证管理器-->
        <property name="realm" ref="permissionsRealm" />
        <!-- 缓存管理器 -->
        <property name="cacheManager" ref="shiroCacheManager" />
    </bean>
    <!--认证管理器实现类-->
    <bean id="permissionsRealm" class="com.soft.security.Realm.PermissionsRealm" />
     <!--缓存管理器实现类,这里用的是系统自带的-->
    <bean id="shiroCacheManager"  class="org.apache.shiro.cache.MemoryConstrainedCacheManager"   />    

2然后,在PermissionsRealm类中,重写doGetAuthorizationInfo方法,在方法中需要做两件事:(1)设置角色(2)设置权限点。代码如下:

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addRole("角色名");
info.addStringPermission("权限点名");

3.此时,在JSP页面中就可以调用标签验证权限与角色了。

  在页面顶部引用<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 标签库,

  然后在想触发权限点的地方写入:

<shiro:hasPermission name="1111">  
    用户拥有权限
</shiro:hasPermission>  

 如果用户有1111权限,则会显示“用户拥有权限”,同样,如果测试用户是否拥有某个角色,可以用以下标签:

<shiro:hasRole name="管理员">
    用户拥有角色
</shiro:hasRole>

4.由于在1中,配置文件里面已经配置了缓存管理器,因此每次页面打开,后台只会读取一次用户角色+权限,后续都会用缓存,重新登陆后缓存自动清空。

原文地址:https://www.cnblogs.com/linl/p/4042869.html