shiro整合swagger的注意事項(xiàng)
swagger是一個(gè)很好的rest api管理工具,最近又整合了基于shiro的權(quán)限控制,出問題了,http://localhost:8080/swagger-ui.html訪問不正常,問題肯定是shiro沒放行導(dǎo)致的
shiro 配置
在shiroFilter中的配置如下:
@Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //Shiro的核心安全接口,這個(gè)屬性是必須的 shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String, Filter> filterMap = new LinkedHashMap<>(); filterMap.put("authc", new AjaxPermissionsAuthorizationFilter()); shiroFilterFactoryBean.setFilters(filterMap); /*定義shiro過濾鏈 Map結(jié)構(gòu) * Map中key(xml中是指value值)的第一個(gè)'/'代表的路徑是相對(duì)于HttpServletRequest.getContextPath()的值來(lái)的 * anon:它對(duì)應(yīng)的過濾器里面是空的,什么都沒做,這里.do和.jsp后面的*表示參數(shù),比方說login.jsp?main這種 * authc:該過濾器下的頁(yè)面必須驗(yàn)證后才能訪問,它是Shiro內(nèi)置的一個(gè)攔截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter */ Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); /* 過濾鏈定義,從上向下順序執(zhí)行,一般將 / ** 放在最為下邊:這是一個(gè)坑呢,一不小心代碼就不好使了; authc:所有url都必須認(rèn)證通過才可以訪問; anon:所有url都都可以匿名訪問 */ filterChainDefinitionMap.put("/", "anon"); filterChainDefinitionMap.put("/static/**", "anon"); filterChainDefinitionMap.put("/login/auth", "anon"); filterChainDefinitionMap.put("/login/logout", "anon"); filterChainDefinitionMap.put("/error", "anon"); filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; }
首先 常規(guī)的過濾放行如下:
filterChainDefinitionMap.put("/swagger-ui.html", "anon"); filterChainDefinitionMap.put("/swagger-resources", "anon"); filterChainDefinitionMap.put("/v2/api-docs", "anon"); filterChainDefinitionMap.put("/webjars/springfox-swagger-ui/**", "anon");
重新打開shiro,運(yùn)行,swagger2頁(yè)面訪問正常,但是程序日志輸出依然有權(quán)限訪問出錯(cuò)
于是繼續(xù)排查,受限請(qǐng)求如下:
http://localhost:8080/configuration/security http://localhost:8080/configuration/ui
所以繼續(xù)添加放行:
filterChainDefinitionMap.put("/configuration/security", "anon"); filterChainDefinitionMap.put("/configuration/ui", "anon");
最終配置為:
@Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //Shiro的核心安全接口,這個(gè)屬性是必須的 shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String, Filter> filterMap = new LinkedHashMap<>(); filterMap.put("authc", new AjaxPermissionsAuthorizationFilter()); shiroFilterFactoryBean.setFilters(filterMap); /*定義shiro過濾鏈 Map結(jié)構(gòu) * Map中key(xml中是指value值)的第一個(gè)'/'代表的路徑是相對(duì)于HttpServletRequest.getContextPath()的值來(lái)的 * anon:它對(duì)應(yīng)的過濾器里面是空的,什么都沒做,這里.do和.jsp后面的*表示參數(shù),比方說login.jsp?main這種 * authc:該過濾器下的頁(yè)面必須驗(yàn)證后才能訪問,它是Shiro內(nèi)置的一個(gè)攔截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter */ Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); /* 過濾鏈定義,從上向下順序執(zhí)行,一般將 / ** 放在最為下邊:這是一個(gè)坑呢,一不小心代碼就不好使了; authc:所有url都必須認(rèn)證通過才可以訪問; anon:所有url都都可以匿名訪問 */ filterChainDefinitionMap.put("/", "anon"); filterChainDefinitionMap.put("/static/**", "anon"); filterChainDefinitionMap.put("/login/auth", "anon"); filterChainDefinitionMap.put("/login/logout", "anon"); filterChainDefinitionMap.put("/error", "anon"); //swagger放行 filterChainDefinitionMap.put("/swagger-ui.html", "anon"); filterChainDefinitionMap.put("/swagger-resources", "anon"); filterChainDefinitionMap.put("/v2/api-docs", "anon"); filterChainDefinitionMap.put("/webjars/springfox-swagger-ui/**", "anon"); filterChainDefinitionMap.put("/configuration/security", "anon"); filterChainDefinitionMap.put("/configuration/ui", "anon"); filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; }
注意:filterChainDefinitionMap.put("/**", "authc") 需要放置在最后面。
最終結(jié)果: 訪問http://localhost:8080/api/swagger-ui.html出現(xiàn)
以上就是shiro整合swagger需要注意的地方的詳細(xì)內(nèi)容,更多關(guān)于shiro整合swagger的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- LayUI+Shiro實(shí)現(xiàn)動(dòng)態(tài)菜單并記住菜單收展的示例
- SpringBoot配置shiro安全框架的實(shí)現(xiàn)
- SpringBoot 整合 Shiro 密碼登錄與郵件驗(yàn)證碼登錄功能(多 Realm 認(rèn)證)
- 解決Springboot整合shiro時(shí)靜態(tài)資源被攔截的問題
- springboot整合Shiro的步驟
- Shiro+Redis實(shí)現(xiàn)登錄次數(shù)凍結(jié)的示例
- Springboot實(shí)現(xiàn)Shiro整合JWT的示例代碼
- springmvc集成shiro登錄失敗處理操作
相關(guān)文章
Spring?IoC容器Bean作用域的singleton與prototype使用配置
這篇文章主要為大家介紹了Spring?IoC容器Bean作用域的singleton與prototype使用配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12mybatis抽取基類BaseMapper增刪改查的實(shí)現(xiàn)
目前項(xiàng)目當(dāng)中使用mapper.xml文件方式對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,但是每個(gè)里邊都有增/刪/改/查,為了方便開發(fā),把這些公共的代碼提取出來(lái),不用當(dāng)做基類,不用每個(gè)Mapper文件都寫了,本文就詳細(xì)的介紹一下實(shí)現(xiàn)方法2021-09-09如何把idea中的項(xiàng)目導(dǎo)入github倉(cāng)庫(kù)中(圖文詳解)
這篇文章主要介紹了如何把idea中的項(xiàng)目導(dǎo)入github倉(cāng)庫(kù)中,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07IDEA個(gè)性化設(shè)置注釋模板詳細(xì)講解版
IDEA自帶的注釋模板不是太好用,我本人到網(wǎng)上搜集了很多資料系統(tǒng)的整理了一下制作了一份比較完整的模板來(lái)分享給大家,下面這篇文章主要給大家介紹了IDEA個(gè)性化設(shè)置注釋模板的相關(guān)資料,需要的朋友可以參考下2024-01-01java中BigDecimal類型比較大小和絕對(duì)值計(jì)算方式
這篇文章主要介紹了java中BigDecimal類型比較大小和絕對(duì)值計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07JSON--List集合轉(zhuǎn)換成JSON對(duì)象詳解
這篇文章主要介紹了List集合轉(zhuǎn)換成JSON對(duì)象,小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。2017-01-01