摘要:此文章僅僅說明在整合時的一些坑并不是教程增加依賴集成依賴配置三個必須的用于授權(quán)和登錄創(chuàng)建自己的實例用于實現(xiàn)權(quán)限三種方式實現(xiàn)定義權(quán)限路徑第一種使用角色名定義第二種使用權(quán)限定義第三種使用接口的自定義配置此處配置之后需要在對應(yīng)的
此文章僅僅說明在springboot整合shiro時的一些坑,并不是教程
增加依賴
org.apache.shiro shiro-spring-boot-web-starter 1.4.0-RC2
配置三個必須的Bean
Realm
用于授權(quán)和登錄
@Bean public Realm realm() { //創(chuàng)建自己的Realm實例 return new UserRealm(); }
ShiroFilterChainDefinition
用于實現(xiàn)權(quán)限
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition(); // 三種方式實現(xiàn)定義權(quán)限路徑 // 第一種:使用角色名定義 chainDefinition.addPathDefinition("/admin/**", "authc, roles[admin]"); // 第二種:使用權(quán)限code定義 chainDefinition.addPathDefinition("/docs/**", "authc, perms[document:read]"); // 第三種:使用接口的自定義配置(此處配置之后需要在對應(yīng)的接口使用@RequiresPermissions("")) chainDefinition.addPathDefinition("/**", "authc"); return chainDefinition;
CacheManager
緩存管理
@Bean protected CacheManager cacheManager() { return new MemoryConstrainedCacheManager(); }
還有一些配置,可以在配置文件中配置,具體配置項見 shiro配置
以下內(nèi)容是為了實現(xiàn)前后端分離,配置shiro攔截器實現(xiàn)返回401狀態(tài)碼的需求
編寫攔截器類
public class FormLoginFilter extends PathMatchingFilter { @Override protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { Subject subject = SecurityUtils.getSubject(); boolean isAuthenticated = subject.isAuthenticated(); if (!isAuthenticated) { HttpServletResponse resp = (HttpServletResponse) response; resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED); resp.getWriter().print("NO AUTH!"); return false; } return true; } }
在之前配置的三個Bean的基礎(chǔ)上多配置一個BeanShiroFilterFactoryBean
@Bean public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); // 必須設(shè)置SecuritManager shiroFilterFactoryBean.setSecurityManager(securityManager); Mapfilters = shiroFilterFactoryBean.getFilters(); //配置攔截器,實現(xiàn)無權(quán)限返回401,而不是跳轉(zhuǎn)到登錄頁 filters.put("authc", new FormLoginFilter()); // 如果不設(shè)置默認(rèn)會自動尋找Web工程根目錄下的"/login.jsp"頁面 shiroFilterFactoryBean.setLoginUrl("/login"); // 登錄成功后要跳轉(zhuǎn)的鏈接 shiroFilterFactoryBean.setSuccessUrl("/index"); // 未授權(quán)界面; shiroFilterFactoryBean.setUnauthorizedUrl("/403"); // 攔截器 Map filterChainDefinitionMap = new LinkedHashMap (); // 過濾鏈定義,從上向下順序執(zhí)行,一般將 /**放在最為下邊 // authc:所有url都必須認(rèn)證通過才可以訪問; anon:所有url都都可以匿名訪問 filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; }
此處配置了過濾鏈,上面三個必須的Bean中修改其中的ShiroFilterChainDefinition
@Bean public ShiroFilterChainDefinition shiroFilterChainDefinition() { //不需要在此處配置權(quán)限頁面,因為上面的ShiroFilterFactoryBean已經(jīng)配置過,但是此處必須存在,因為shiro-spring-boot-web-starter或查找此Bean,沒有會報錯 return new DefaultShiroFilterChainDefinition();; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68736.html
摘要:開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章系列處理登錄請求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章! Spring Boo...
摘要:進(jìn)行下一項配置,為了區(qū)分必須加入。另起一行,以示尊重。這行代碼主要是用于驗證,后面再說。然后跑下接口,發(fā)現(xiàn)沒問題,正常打印,說明主體也在上下文中了。說明這會上下文環(huán)境中我們主體不存在。所說以,主體數(shù)據(jù)生命周期是一次請求。 showImg(https://segmentfault.com/img/bVbtoG1?w=1600&h=900); 原來一直使用shiro做安全框架,配置起來相當(dāng)...
閱讀 970·2022-06-21 15:13
閱讀 1855·2021-10-20 13:48
閱讀 1039·2021-09-22 15:47
閱讀 1373·2019-08-30 15:55
閱讀 3128·2019-08-30 15:53
閱讀 526·2019-08-29 12:33
閱讀 721·2019-08-28 18:15
閱讀 3467·2019-08-26 13:58