shiro框架的四中權限控制方式
阿新 • • 發佈:2017-11-28
ont -type cnblogs cocos cglib ram rms zed dai
https://www.cnblogs.com/cocosili/p/7103025.html
一.在自定義的realm中進行權限控制
在applicationContext.xml文件中添加 /areaAction_pageQuery.action = perms["area"]
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <!-- 註入shiro框架核心對象,安全管理器 --> <property name="securityManager" ref="securityManager"/> <!--private String loginUrl;登錄頁面 private String successUrl;登錄成功後跳轉頁面 private String unauthorizedUrl;權限不足時的提示頁面--> <property name="loginUrl" value="/login.html"/> <property name="successUrl" value="/index.html"/> <property name="unauthorizedUrl" value="/unauthorized.html"/> <!-- 指定URL攔截規則 --> <property name="filterChainDefinitions"> <!--authc:代表shiro框架提供的一個過濾器,這個過濾器用於判斷當前用戶是否已經完成認證, 如果當前用戶已經認證,就放行,如果當前用戶沒有認證,跳轉到登錄頁面 anon:代表shiro框架提供的一個過濾器,允許匿名訪問--> <value> /css/* = anon /images/* = anon /js/** = anon /validatecode.jsp* = anon /userAction_login.action = anon /areaAction_pageQuery.action = perms["area"] /** = authc </value> </property> </bean>
此時訪問areaAction_pageQuery.action是頁面不會查詢到數據,須要為用戶授權
在自定義realm中為用戶授權
@Override /** * 授權方法 */ protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); //為用戶授權,只需將用戶的權限添加info中即可 info.addStringPermission("area"); return info; }
二.使用shiro的方法註解為用戶授權
1.在spring配置文件applicationContext.xml中配置開啟shiro註解支持
<!-- 基於spring自動代理方式為service創建代理對象,實現權限控制 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"> <!-- 強制使用cglibdaili --> <property name="proxyTargetClass" value="true"></property> </bean> <!-- 配置切面 --> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"></property> </bean>
2.配置事物註解,強制使用cglib代理
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
3.在service上配置註解
1 @RequiresPermissions("courier:delete") 2 public void deleteBatch(String ids) { 3 //判斷是否為空 4 if(StringUtils.isNoneBlank(ids)){ 5 String[] idsArrays = ids.split(","); 6 for (String id : idsArrays) { 7 Integer courierid = Integer.parseInt(id); 8 dao.deleteCourier(courierid); 9 } 10 } 11 }
三.使用shiro標簽進行權限控制
1.在jsp頁面中引入shiro標簽庫
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
2.在頁面中使用標簽
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <!-- 判斷當前用戶是否已經認證,已認證就可以看到標簽中的內容 --> <shiro:authenticated> 看到內容就說明你已經認證成功了! </shiro:authenticated> <br> <!-- 判斷當前用戶是否擁有指定的權限 --> <shiro:hasPermission name="area"> <input value="這是判斷權限的按鈕"> </shiro:hasPermission> <br> <!-- 判斷當前用戶是否擁有指定的角色 --> <shiro:hasRole name="admin"> <input value="這是判斷角色的按鈕"> </shiro:hasRole> </body> </html>
shiro框架的四中權限控制方式