shiro進行權限控制的四種方式
阿新 • • 發佈:2018-03-01
shiro
```我們使用shiro進行權限控制 有以下幾種方式
1. URL攔截權限控制:基於filter過濾器實現
我們在spring配置文件中配置shiroFilter時配置
<!--指定URL級別攔截策略 -->
<property name="filterChainDefinitions">
<value>
/css/ = anon
/js/ = anon
/images/ = anon
/validatecode.jsp = anon
/login.jsp = anon
/userActionlogin.action = anon
/pagebasestaff.action = perms["staff-list"]
/ = authc
</value>
</property>
2. 方法註解權限控制:基於代理技術實現
我們在代碼方法上用註解聲明調用該方法需要什麽權限。
首先要在spring配置文件中進行聲明開啟shiro註解:
<!-- 開啟shiro框架註解支持 -->*
<bean id="defaultAdvisorAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<!-- 必須使用cglib方式為Action對象創建代理對象 -->
<property name="proxyTargetClass" value="true"/>
</bean>
<!-- 配置shiro框架提供的切面類,用於創建代理對象 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>
然後在方法上聲明:
@RequiresPermissions("staff-delete")
//執行這個方法,需要當前用戶具有staff-delete這個權限
public String deleteBatch(){
staffService.deleteBatch(ids);
return LIST;
}
*
3. 頁面標簽權限控制:頁面表簽技術實現
首先要在jsp頁面進入表簽:
<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %>
然後包裹權限控制的內容
<shiro:hasPermission name="Permission">
xxxxxxxxxxxxxxxx
</shiro:hasPermission>
4.代碼級別權限控制:
public String edit(){
Subject subject = SecurityUtils.getSubject();
subject.checkPermission("staff-edit");
Staff staff = staffService.findById(model.getId());
staff.setName(model.getName());
staff.setTelephone(model.getTelephone());
staff.setHaspda(model.getHaspda());
staff.setStandard(model.getStandard());
staff.setStation(model.getStation());
staffService.update(staff);
return LIST;
}
總結:
使用shiro進行權限控制時 這四種方法並不是進行單一的使用,是相互結合的使用從而完整的進行權限控制。
shiro進行權限控制的四種方式