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中,配置文件里面已經配置了緩存管理器,因此每次頁面打開,后台只會讀取一次用戶角色+權限,后續都會用緩存,重新登陸后緩存自動清空。