原來SpringSecurity整合OAuth2后開放權(quán)限攔截路徑還能這么玩徙融?

當我們整合了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組件系列文章

創(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

作者個人 博客
使用開源框架 ApiBoot 助你成為Api接口服務(wù)架構(gòu)師

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幸海,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子物独,更是在濱河造成了極大的恐慌挡篓,老刑警劉巖帚称,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秽澳,死亡現(xiàn)場離奇詭異,居然都是意外死亡楼吃,警方通過查閱死者的電腦和手機妄讯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門亥贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炕置,你說我怎么就攤上這事讹俊。” “怎么了仍劈?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵贩疙,是天一觀的道長。 經(jīng)常有香客問我组民,道長悲靴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任耸三,我火速辦了婚禮浇揩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘积锅。我一直安慰自己,他們只是感情好适篙,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布箫爷。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪薄货。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音税娜,去河邊找鬼。 笑死概行,一個胖子當著我的面吹牛弧岳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涧卵,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腹尖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乐设?” 一聲冷哼從身側(cè)響起断凶,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤认烁,失蹤者是張志新(化名)和其女友劉穎介汹,沒想到半個月后舶沛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡叹卷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年坪它,在試婚紗的時候發(fā)現(xiàn)自己被綠了往毡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡懒震,死狀恐怖嗤详,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葱色,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站舞痰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏玷禽。R本人自食惡果不足惜呀打,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撩银。 院中可真熱鬧豺憔,春花似錦够庙、人聲如沸抄邀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奥喻。三九已至,卻和暖如春读宙,著一層夾襖步出監(jiān)牢的瞬間楔绞,已是汗流浹背唇兑。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔫耽,地道東北人留夜。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓碍粥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嚼摩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容