十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
怎么在SpringBoot中實(shí)現(xiàn)Shiro授權(quán)?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

十載的蘭山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整蘭山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“蘭山網(wǎng)站設(shè)計(jì)”,“蘭山網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
使用Shiro過(guò)濾器實(shí)現(xiàn)授權(quán)
設(shè)置好授權(quán)攔截跳轉(zhuǎn)的請(qǐng)求地址
/**
* 創(chuàng)建ShiroFilterFactoryBean
*/
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean();
//設(shè)置安全管理器
shiroFilterFactoryBean.setSecurityManager(securityManager);
//添加Shiro內(nèi)置過(guò)濾器
/**
* Shiro內(nèi)置過(guò)濾器,可以實(shí)現(xiàn)權(quán)限相關(guān)的攔截器
* 常用的過(guò)濾器:
* anon:無(wú)需認(rèn)證(登錄)可以訪問(wèn)
* authc:必須認(rèn)證才可以訪問(wèn)
* user:如果使用rememberMe的功能可以直接訪問(wèn)
* perms:該資源必須得到資源權(quán)限才可以訪問(wèn)
* role:該資源必須得到角色權(quán)限才可以訪問(wèn)
*/
Map filterMap= new LinkedHashMap();
//設(shè)置攔截后跳轉(zhuǎn)的請(qǐng)求路徑
shiroFilterFactoryBean.setLoginUrl("/user/badRequest");
//設(shè)置未授權(quán)提示的頁(yè)面
shiroFilterFactoryBean.setUnauthorizedUrl("/user/badRequest");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
return shiroFilterFactoryBean;
} 再使用 filterMap 去放對(duì)應(yīng)的攔截即可,例如 filterMap.put("/**", "anon")
上面是認(rèn)證的,如果需要授權(quán)的,相應(yīng)的多給一個(gè)任意的授權(quán)字符串如 filterMap.put("/user/add", "perms[user:add]")
授權(quán)邏輯編寫(xiě)的位置
/**
* 執(zhí)行授權(quán)邏輯
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
System.out.println("開(kāi)始執(zhí)行Shiro的授權(quán)方法...");
//給資源進(jìn)行授權(quán)
SimpleAuthorizationInfo info= new SimpleAuthorizationInfo();
//添加資源的授權(quán)字符串
info.addStringPermission("user:add");
return null;
}授權(quán)字符串和之前的字符串對(duì)應(yīng)
補(bǔ)充
/**
* 執(zhí)行認(rèn)證邏輯
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {
System.out.println("開(kāi)始執(zhí)行Shiro的認(rèn)證方法...");
//編寫(xiě)Shiro判斷邏輯,判斷用戶名和密碼
//判斷用戶名是否存在
UsernamePasswordToken token=(UsernamePasswordToken)arg0;
User user = userMapper.findByUsername(token.getUsername());
if(user==null)
return null;
//判斷密碼是否正確,參數(shù)一為認(rèn)證的實(shí)體
return new SimpleAuthenticationInfo(user,user.getPassword(),"");
}在執(zhí)行認(rèn)證時(shí)的SimpleAuthenticationInfo第一個(gè)傳參可以用來(lái)獲取當(dāng)前用戶
/**
* 執(zhí)行授權(quán)邏輯
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
System.out.println("開(kāi)始執(zhí)行Shiro的授權(quán)方法...");
//給資源進(jìn)行授權(quán)
SimpleAuthorizationInfo info= new SimpleAuthorizationInfo();
//添加資源的授權(quán)字符串
info.addStringPermission("user:register");
//獲取當(dāng)前的登錄用戶
User user=(User)SecurityUtils.getSubject().getPrincipal();
return null;
}看完上述內(nèi)容,你們掌握怎么在SpringBoot中實(shí)現(xiàn)Shiro授權(quán)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!