vb6编写用户权限_仅需三行代码,即可让Apache Shiro接管Swagger权限认证
有很多文章提到,在生產環境中需要關閉Swagger功能,防止系統資源泄露。今天,我結合自己開發過程中的經驗,分享一個只需幾行代碼便可實現讓Apache Shiro接管Swagger認證和授權的方法。如果還有更好的方法,歡迎在文章末尾給我留言,一起交流。
初識Swagger
簡單來說,Swagger是一個開放源代碼的框架,旨在使用通用化的語言,讓開發者和非開發者都能理解你設計的API是什么結構,有什么用途。API文檔好比建筑藍圖,在建造房子時,必須按照藍圖的規格參數進行。
通常,一個軟件項目會伴隨著很多的API文檔需要編寫,當軟件版本變更時,還需要修改所有的API文檔細節(例如:請求地址,請求參數,返回值等等)。這是一件極具挑戰性的工作。長期以來,工程師們一直在努力尋找一種標準化的流程/方法來解決API文檔的設計,編寫,測試和維護問題,Swagger就是在這樣一種背景下誕生的。
Swagger
Swagger為API文檔的設計,開發,測試,維護提供了統一的解決方案。這極大的減輕了開發人員的工作負擔。但隨之而來的一個問題也會讓人擔心,通過Swagger UI提供統一的API文檔閱覽和測試,這會導致在生產環境下暴露系統資源。
如果你在項目中未使用過Swagger,你可以借助頭條App的搜索引擎,打開頭條App并在上方的輸入框輸入“Swagger”并搜索,你可以得到更多關于Swagger的資訊,例如:
頭條App搜索Swagger
我們并不希望所有人都可以查閱系統的API文檔,就像不是所有人都有權限查看建筑藍圖一樣。那么如何解決這一問題呢?
Apache Shiro接管Swagger權限認證
Swagger官方提供了6種認證和授權方式:basic-authentication、API密鑰、bearer-authentication、Oauth 2.0、OpenID Connect Discovery和Cookie。但這幾種方式在體驗上效果都不好(當然,你也可以選擇在生產環境中關閉Swagger的功能)。能不能有一種方式,讓系統本身的權限認證體系接管Swagger的授權認證工作,讓Swagger專注于自己擅長的領域呢?這就是本文要介紹的重點。
快速認識Apache Shiro
Apache Shiro?是一個功能強大且易于使用的Java安全框架,用于執行身份認證,授權,加密和會話管理。你可以輕松地將其集成到你的項目中,且不需要改動太多的代碼。Shiro支持一個或多個可插拔的數據源,例如LDAP、JDBC、Active Directory等等,與此同時,Shiro還支持不同粒度的訪問控制,如基于用戶組,用戶角色,資源權限等。
Apache Shiro
如果你還想了解更多,不妨在頭條App搜索框中輸入“Shiro”并搜索,你你可獲取更多的指導視頻,例如下面的檢索信息:
頭條App搜索shro
使用Shiro接管Swagger認證授權
首先,假定你已經在自己的項目中使用了Swagger,并且你的項目是基于Spring Boot 2.0進行構建的,同時使用Maven對項目的依賴進行管理。如果你的項目還未使用Swagger,請將下面代碼配置到pom.xml文件中:
io.springfox springfox-swagger2 2.9.2io.springfox springfox-swagger-ui 2.9.2另外,請檢查項目中是否加入了Shiro項目依賴,如果還未添加,請將下面代碼配置到pom.xml文件中:
org.apache.shiro shiro-core 1.4.2org.apache.shiro shiro-ehcache 1.4.0org.apache.shiro shiro-spring 1.4.0備注
shiro-core:Apache Shiro核心依賴包
shiro-ehcache:基于Ehcache實現的數據緩存依賴包
shiro-spring:Apache Shiro與Spring整合依賴包
Apache Shiro & Swagger
配置Swagger
依賴就緒后,創建一個Swagger的配置文件并設置Swagger要掃描的包路徑(通常是Controller所在的包),API文檔標題(title),描述(description),版本號(version),聯系方式(contact)以及證書名稱(license)等等。下面是Swagger配置文件示例:
SwaggerConfiguration.java
@Configuration@EnableSwagger2public class SwaggerConfiguration { @Bean public Docket createRestApi(){ return new Docket(DocumentationType.SWAGGER_2) .pathMapping("/") .select() .apis(RequestHandlerSelectors.basePackage("com.ramostear.controller")) .paths(PathSelectors.any()) .build() .apiInfo( new ApiInfoBuilder() .title("Apache Shiro & Swagger") .description("使用Apache Shiro接管Swagger認證和授權") .version("1.0.0") .contact( new Contact("樹下魅狐", "https://www.ramostear.com", "ramostear@163.com") ) .license("The Apache License") .build() ); }}注意
除了使用@Configuration對配置類進行注解外,別將@EnableSwagger注解遺漏!
在Shiro中配置Swagger
如果你的項目已經使用Apache Shiro進行認證和授權工作,那么只需要在ShiroFilterFactoryBean的配置代碼中加入對Swagger的過濾操作即可。你可以參照下面的代碼進行配置:
ShiroConfiguration.java
@Configurationpublic class ShiroConfiguration{ @Bean public EhCacheManager ehCacheManager(){...} @Bean public CustomShiroRealm customShiroRealm(){...} @Bean public SecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setCacheManager(ehCacheManager()); securityManager.setRealm(customShiroRealm()); return securityManager; } ... @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager){ ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean(); filterFactoryBean.setSecurityManager(securityManager); Map filterChainDefinition = new LinkedHashMap<>(); ... filterChainDefinition.put("/swagger-ui.html","authc"); filterChainDefinition.put("/v2/**","authc"); filterChainDefinition.put("/swagger-resources/**","authc"); filterFactoryBean.setFilterChainDefinitionMap(filterChainDefinition); return filterFactoryBean; } ....}補充
除了上述給出的配置方式外,你可以根據實際需要,配置更細粒度的權限,例如用戶組,角色以及資源權限等等。
至此,如果你的項目原本使用了Apache Shiro框架,那么只需在原代碼的基礎上,增加三行配置代碼,即可讓Apache Shiro接管Swagger的認證和授權工作。
最后,通過實際項目來演示Apache Shiro接管Swagger認證和授權工作的效果:
Apache Shiro管理Swagger權限演示效果
說明
/admin/swagger請求頁面嵌入了一個iframe,其地址為:/swagger-ui.html。具體代碼如下:
swagger.html
當用戶登錄成功后,可以正常訪問Swagger的API文檔頁面,當注銷當前用戶后,再次訪問Swagger頁面,系統會跳轉到用戶登錄頁面,要求驗證用戶身份。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的vb6编写用户权限_仅需三行代码,即可让Apache Shiro接管Swagger权限认证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东的商品搜索功能是如何实现的_【干货小
- 下一篇: node 更新_Node.js 15 正