Api架構奧義:ApiBoot實現零代碼整合Spring Security & OAuth2

接口服務的安全性一直是程序員比較注重的一個問題,成熟的安全框架也比較多,其中一個組合就是Spring SecurityOAuth2的整合,在ApiBoot內經過代碼的封裝、自動化配置實現了自動化整合這兩大安全框架。html

博客原文:blog.yuqiyu.com/apiboot-sec…java

ApiBoot Security OAuth簡介

ApiBoot Security OAuthApiBoot開源項目內的一個組件,內部經過SpringBoot AutoConfiguration整合了Spring SecurityOAuth2,並且支持多種存儲方式,如:內存(memory)數據庫(jdbc)Redis等,使用配置文件的方式來代替代碼侵入式集成方式,提升開發效率、減小非業務的繁瑣代碼,並且還有這比較高的可擴展性。git

建立項目

經過Idea開發工具建立一個名爲apiboot-security-oauth-zero-code-integrationSpringBoot項目。數據庫

添加ApiBoot統一版本依賴

在添加依賴以前咱們須要將ApiBoot的統一版本依賴加入到咱們項目的pom.xml文件內,以下所示:api

<!--ApiBoot統一版本依賴-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.minbox.framework</groupId>
            <artifactId>api-boot-dependencies</artifactId>
            <version>2.1.5.RELEASE</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>
複製代碼

添加ApiBoot Security OAuth依賴

添加完成版本依賴後,咱們繼續在pom.xml文件內添加ApiBoot Security OAuth依賴,以下所示:安全

<dependencies>
  <!--SpringBoot Web-->
  <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>
複製代碼

配置ApiBoot Security用戶列表

ApiBoot Security默認支持內存方式(memory)配置用戶列表,用於整合OAuth2密碼受權方式(grant_type=password),咱們須要在application.yml配置文件內添加相關配置,以下所示:bash

spring:
 application:
 name: apiboot-security-oauth-first-application
server:
 port: 9090
# ApiBoot 相關配置
api:
 boot:
    # ApiBoot Security配置
 security:
      # 配置內存用戶列表
 users:
 - username: hengboy
 password: 123456
 - username: yuqiyu
 password: 123123
複製代碼

經過api.boot.security.users參數能夠配置多個用戶信息,每一個用戶可配置usernamepasswordroles,能夠經過查看org.minbox.framework.api.boot.autoconfigure.security.ApiBootSecurityProperties源碼類瞭解詳情。

  • username:配置Spring Security用戶的用戶名。
  • password:配置Spring Security用戶的密碼。
  • roles:配置Spring Security用戶對應受權的角色列表,多個可使用英文半角,隔開,或者使用-方式配置。

運行測試

咱們經過XxxApplication方式啓動本章項目。

測試點:獲取AccessToken

項目運行成功後咱們先來測試下是否能夠獲取到AccessToken

Curl方式獲取:

➜ ~ curl -X POST ApiBoot:ApiBootSecret@localhost:9090/oauth/token -d "grant_type=password&username=hengboy&password=123456"
{"access_token":"f16202f7-ab8c-41ae-86be-e314aebe82ff","token_type":"bearer","refresh_token":"93c74812-ec5b-4676-8378-b68e4c1751ae","expires_in":3297,"scope":"api"}
複製代碼

PostMan方式獲取:

若是對Spring SecurityOAuth2整合有必定經驗的同窗應該明白grant_typeOAuth2內提供的其中一種受權方式,而參數usernamepassword則是整合後對應的Spring Security用戶名以及密碼,也就是咱們在application.yml配置文件api.boot.security.users配置用戶列表的其中一個用戶信息

在上面分別經過CurlPostMan兩種方式進行測試獲取AccessToken,都是能夠直接獲取到的。

測試點:獲取當前用戶信息

ApiBoot Security OAuth獲取當前用戶信息的方式與Spring Security同樣,經過注入java.security.Principal接口來完成,下面咱們建立一個名爲UserController的控制器來測試下效果:

package org.minbox.chapter.apiboot.security.oauth.first.application;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.Principal;

/** * 登陸用戶信息 * * @author 恆宇少年 */
@RestController
@RequestMapping(value = "/api/user")
public class UserController {

    /** * 獲取當前登陸的用戶信息 * 經過Spring Security提供的註解{@link PreAuthorize}進行驗證角色 * * @param principal {@link Principal} * @return {@link Principal#getName()} */
    @GetMapping
    @PreAuthorize("hasRole('api')")
    public String info(Principal principal) {
        return principal.getName();
    }
}
複製代碼

注意:ApiBoot Security OAuth默認權限攔截的路徑時/api/**,因此咱們在測試控制器上配置了/api/user做爲路徑前綴,若是想對ApiBoot Security OAuth詳細瞭解,請訪問ApiBoot官網文檔ApiBoot Security使用文檔

咱們經過Curl方式訪問http://localhost:9090/api/user接口效果以下:

➜ ~ curl http://localhost:9090/api/user -H 'Authorization: Bearer d73e86a8-892f-42c1-bc95-04aedfe97828'
hengboy
複製代碼

訪問/api/user路徑的AccessToken是經過用戶hengboy用戶生成的,因此該接口返回了hengboy用戶名。

敲黑板,劃重點

ApiBoot Security OAuth極其簡單的完成了Spring SecurityOAuth2的整合,使用內存方式時不須要配置一行代碼就能夠完成自動化的整合。

代碼示例

本篇文章示例源碼能夠經過如下途徑獲取,目錄爲SpringBoot2.x/apiboot-security-oauth-first-application

做者我的 博客 使用開源框架 ApiBoot 助你成爲Api接口服務架構師

相關文章
相關標籤/搜索