當我們整合了Spring Security
以及OAuth2
后發(fā)現(xiàn),有一些業(yè)務(wù)請求是需要開放的,因為種種原因這時訪問者還沒有身份標識(比如:用戶剛來萨脑,還沒有注冊葱峡,需要進行新用戶注冊,這時注冊業(yè)務(wù)相關(guān)的接口都應(yīng)該是開放的
)蛛芥,下面我們來看看ApiBoot
是怎么排除路徑不進行權(quán)限攔截的军援。
官方相關(guān)文檔
相關(guān)ApiBoot Security
官方使用文檔,請訪問 ApiBoot Security涯竟。
在文檔的第4. 默認排除路徑
部分空厌,我們了解到了ApiBoot Security
為了與其他的第三方框架進行集成,在內(nèi)部已經(jīng)添加了一些默認的攔截路徑
筐钟,當我們在添加開放路徑
時會在默認的基礎(chǔ)上增量添加赋朦,不會覆蓋。
ApiBoot Security OAuth組件系列文章
- ApiBoot實現(xiàn)零代碼整合Spring Security & OAuth2
- ApiBoot零代碼整合Spring Security的JDBC方式獲取AccessToken
- 見過這么簡單的方式整合Spring Security & OAuth2的自定義查詢用戶嗎壹将?
- Spring Security & OAuth2實現(xiàn)短信驗證碼方式獲取AccessToken
- 原來Spring Security整合OAuth2后開放權(quán)限攔截路徑還能這么玩毛嫉?
- 我以為OAuth2整合JWT是很困難的事情,直到我使用了ApiBoot惊畏,一切都變了密任!
- 來看看OAuth2怎么設(shè)置AccessToken有效期時間時長
- OAuth2使用Redis來存儲客戶端信息以及AccessToken
創(chuàng)建項目
我們使用IDEA
開發(fā)工具創(chuàng)建一個SpringBoot
項目偷俭,在pom.xml
內(nèi)添加相關(guān)的依賴涌萤,如下所示:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--ApiBoot Security OAuth安全組件-->
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-starter-security-oauth-jwt</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--ApiBoot統(tǒng)一版本依賴-->
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
排除路徑配置
ApiBoot Security OAuth
安全組件默認攔截配置為/api/**
口猜,也就是/api
下的全部路徑以及子路徑都需要認證后才可以訪問透揣。
我們可以通過api.boot.security.auth-prefix
參數(shù)配置修改保護的路徑列表
辐真,ApiBoot
還提供了另外的一個參數(shù)配置api.boot.security.ignoring-urls
,用于配置開放的路徑列表
(開放路徑可直接訪問侍咱,不走權(quán)限攔截)楔脯,支持使用Ant
風格,application.yml
配置內(nèi)容如下所示:
spring:
application:
name: apiboot-security-open-paths-without-intercept
server:
port: 9090
api:
boot:
# ApiBoot Security安全配置
security:
# 權(quán)限攔截的路徑前綴
auth-prefix: /**
# 排除不攔截的路徑
ignoring-urls:
- /index/**
我們在application.yml
文件內(nèi)配置api.boot.security.ignoring-urls
的值為/index/**
堪嫂,這時我們在訪問/index
木柬、/index/xxx
路徑時都不會經(jīng)過權(quán)限的攔截,直接可以訪問到弄诲。
示例請求
我們來創(chuàng)建一個名為IndexController
的示例控制器齐遵,來驗證我們開放的路徑是否已經(jīng)生效了,如下所示:
/**
* 示例:控制器
*
* @author 恒宇少年
*/
@RestController
@RequestMapping(value = "/index")
public class IndexController {
/**
* 示例:首頁地址
* /index
*
* @return
*/
@GetMapping
public String index() {
return "this is index page.";
}
/**
* 示例:首頁地址子頁面
* /index/sub
*
* @return
*/
@GetMapping(value = "/sub")
public String indexSub() {
return "this is sub index page.";
}
}
在application.yml
我們配置的開放地址為/index/**
拓哟,所以IndexController
控制器內(nèi)的兩個地址/index
伶授、/index/sub
都會被開放,不走權(quán)限攔截违诗,直接放行疮蹦。
運行測試
我們使用IDEA
通過XxxApplication
入口類的方式來啟動本章項目源碼,下面是我們要驗證的測試點。
測試點:開放路徑
我們先來訪問下http://localhost:9090/index
壁公,效果如下所示:
? ~ curl http://localhost:9090/index
this is index page.
直接訪問/index
是可以直接獲取接口返回的內(nèi)容绅项,這也證明了一點,這個地址被開放了囊陡,不再被權(quán)限攔截润努。
在之前說到ApiBoot Security OAuth
開放地址支持Ant
風格,我們配置的開放地址為/index/**
痢畜,所以/index/sub
這個請求地址也應(yīng)該已經(jīng)被開放了鳍侣,效果如下所示:
? ~ curl http://localhost:9090/index/sub
this is sub index page.
如果我們修改
api.boot.security.ignoring-urls
配置為/index
,我們在訪問/index/sub
這個地址時是沒有權(quán)限的线衫,需要攜帶有效的AccessToken
才可以訪問到惑折。
測試點:未開放路徑的攔截
下面我們來完成一個比較特殊的測試點,訪問一個并沒有在后臺定義的路徑白热,如下所示:
? ~ curl http://localhost:9090/index/11
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}
我們并沒有添加/index/xx
這個請求地址的實現(xiàn)粗卜,當訪問時同樣也會被攔截,這證明了我們發(fā)起的請求并沒有到達解析請求就已經(jīng)被權(quán)限攔截了攻臀。
敲黑板纱昧,劃重點
除了被開放的路徑都需要提供有效的AccessToken才可以訪問,無論這個地址是否存在设联,本章為了示例講解方便我這里配置的權(quán)限攔截根地址為/**
,api.boot.security.auth-paths
參數(shù)源碼是一個數(shù)組(詳見:org.minbox.framework.api.boot.autoconfigure.security.ApiBootSecurityProperties
),可以配置多個地址纵东,比如:/user/**
、/order/**
洒扎,api.boot.security.ignoring-urls
同樣支持數(shù)組形式配置多個衰絮。
免費教程專題
恒宇少年在博客整理三套免費學(xué)習(xí)教程專題
,由于文章偏多
特意添加了閱讀指南
胡诗,新文章以及之前的文章都會在專題內(nèi)陸續(xù)填充
淌友,希望可以幫助大家解惑更多知識點。
代碼示例
如果您喜歡本篇文章請為源碼倉庫點個Star
瑰抵,謝謝F髁!肴颊!
本篇文章示例源碼可以通過以下途徑獲取千元,目錄為apiboot-security-open-paths-without-intercept
: