springboot整合shiro:基于前端的權(quán)限控制和基于后端的權(quán)限控制
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
? 作者?|??xueheng_blog
來源 |? urlify.cn/rIFJzm
66套java從入門到精通實(shí)戰(zhàn)課程分享
問題描述:
如何讓前端的某個(gè)按鈕在用戶擁有該按鈕的權(quán)限時(shí)才顯示?如何讓后端的某個(gè)接口在用戶擁有該訪問的權(quán)限時(shí)才可以訪問?
?
解決方法:
基于前端的權(quán)限控制:前端某個(gè)按鈕的隱藏或顯示可以通過shiro的頁面標(biāo)簽來控制,當(dāng)用戶擁有該權(quán)限時(shí),我們就讓該按鈕顯示,否則隱藏;
基于后端的權(quán)限控制:后端的某個(gè)接口我們可以通過shiro的注解來控制是否允許訪問,當(dāng)用戶擁有該權(quán)限時(shí),我們就允許訪問,否則不允許訪問;
一、基于前端的權(quán)限控制
| 標(biāo)簽名 | 作用 |
|---|---|
| shiro:guest | 允許游客訪問的代碼塊 |
| shiro:user | 允許已經(jīng)驗(yàn)證或者通過"記住我"登錄的用戶才能訪問的代碼塊。 |
| shiro:authenticated | 只有通過登錄操作認(rèn)證身份,而并非通過"記住我"登錄的用戶才能訪問的代碼塊。 |
| shiro:notAuthenticated | 未登錄的用戶顯示的代碼塊。 |
| shiro:principal | 顯示當(dāng)前登錄的用戶信息。 |
| 只有擁有admin角色的用戶才能訪問的代碼塊。 | |
| 只有擁有admin或者manager角色的用戶才能訪問的代碼塊。 | |
| 沒有admin角色的用戶顯示的代碼塊 | |
| 只有擁有"admin:delete"權(quán)限的用戶才能訪問的代碼塊。 | |
| 沒有"admin:delete"權(quán)限的用戶顯示的代碼塊。 |
?
1、添加依賴
????org.apache.shiro
????shiro-spring
????1.4.0
????com.github.theborakompanioni
????thymeleaf-extras-shiro
????2.0.0
2、在頁面頭上加標(biāo)簽支持
"http://www.thymeleaf.org"?xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">?
3、配置shiro標(biāo)簽
//配置ShiroDialect:用于thymeleaf和shiro標(biāo)簽配合使用
@Bean
public?ShiroDialect?getShiroDialect(){
????return?new?ShiroDialect();
}?
4、在頁面中使用shiro標(biāo)簽進(jìn)行權(quán)限控制:有兩種方式
?
二、基于后端的權(quán)限控制
1、添加依賴
????org.apache.shiro
????shiro-spring
????1.4.0
????com.github.theborakompanioni
????thymeleaf-extras-shiro
????2.0.0
?2、配置注解支持
/**
?*?開啟shiro?aop注解支持.
?*/
@Bean
public?AuthorizationAttributeSourceAdvisor?authorizationAttributeSourceAdvisor(SecurityManager?securityManager)?{
????AuthorizationAttributeSourceAdvisor?authorizationAttributeSourceAdvisor?=???????new?AuthorizationAttributeSourceAdvisor();
????authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
????return?authorizationAttributeSourceAdvisor;
}3、在控制層接口上添加注解
@GetMapping("/users")
@RequiresPermissions("sys:user:list")?//只有擁有該權(quán)限的用戶才能訪問該接口
public?DataResult>?getAllDept(User?user){
????DataResult?result?=DataResult.success();
????result.setData(this.userService.getUser());
????return?result;
}


??? ?
感謝點(diǎn)贊支持下哈?
評(píng)論
圖片
表情
