第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Spring Security 起步

1. 前言

上一節(jié)我們介紹了「Spring Security」的誕生與應(yīng)用,本節(jié)將創(chuàng)建一個(gè)最基本的 Spring Security 應(yīng)用,以便理解 Spring Security 的運(yùn)行機(jī)制。

本節(jié)實(shí)例是在 Servlet 應(yīng)用中集成 Spring Security 安全框架,在標(biāo)準(zhǔn)的 Servlet 過(guò)濾器(Filter)中應(yīng)用 Spring Security 安全機(jī)制。

基本環(huán)境說(shuō)明

  • Jdk 8
  • Maven
  • Spring Boot
  • Spring Security 5.3.2

2. 實(shí)例詳解

2.1 項(xiàng)目的目錄結(jié)構(gòu)

本實(shí)例我們一共需要?jiǎng)?chuàng)建兩個(gè)文件,其一是 maven 的工程描述文件 pom.xml 我們把它放在工程的根目錄下;其二是 Spring Boot 項(xiàng)目的啟動(dòng)文件 HelloSecurityApplication.java。

完整的目錄描述如下:

├── pom.xml
├── src/
    └── main/
       └──java/
          └──imooc/
             └──springsecurity/
                └──HelloSecurityApplication.java

2.2 增加 Spring Security 依賴(lài)

首先,我們要將 Spring Boot 環(huán)境配置到工程中,也就是在 pom.xml 文件中將當(dāng)前工程的父級(jí)依賴(lài)指定為 Spring Boot。

此步寫(xiě)法如下,在 pom.xml 文件中增加以下節(jié)點(diǎn)信息:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.0.RELEASE</version>
  <relativePath/>
</parent>

第二步,在配置好父級(jí)依賴(lài)后,繼續(xù)在 pom.xml 中增加 Spring Security 依賴(lài)「spring-boot-starter-security」。

此步寫(xiě)法如下:

<dependencies>
    <!-- 重點(diǎn)依賴(lài) -->
    <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-security</artifactId>
	</dependency>

</dependencies>

第三步,為了讓本實(shí)例的效果看得見(jiàn),我們要將它設(shè)置成 Web 工程,所以我們需要繼續(xù)在 pom.xml 文件中添加依賴(lài)。

此步寫(xiě)法如下:

<dependencies>
	...

    <!-- 用于展示認(rèn)證效果 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

2.3 增加啟動(dòng)類(lèi)

src/main/java 中創(chuàng)建類(lèi) HelloSecurityApplication.java,并設(shè)置包名(本項(xiàng)目包名為:imooc.springsecurity),之后在該類(lèi)中增加 Spring Boot 啟動(dòng)聲明。

package imooc.springsecurity;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class HelloSecurityApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSecurityApplication.class, args);
	}

    /**
     * 此方法用于演示測(cè)試結(jié)果。
     */
    @RequestMapping("/hello")
    private String sayHello() {
        return "{'msg': 'hi'}";
    }

}

到此為止,我們的「Spring Security」項(xiàng)目就搭建完成了。

2.4 運(yùn)行測(cè)試

為了避免不同開(kāi)發(fā)環(huán)境的干擾,我們統(tǒng)一使用 Maven 命令行的方式編譯和執(zhí)行項(xiàng)目。

打開(kāi)控制臺(tái),在 pom.xml 同級(jí)目錄(工程根目錄)中輸入命令 mvn spring-boot:run 來(lái)啟動(dòng) Spring Boot 。

此步執(zhí)行命令如下:

mvn spring-boot:run

訪(fǎng)問(wèn) http://localhost:8080/hello 可以看到如下頁(yè)面,此時(shí)系統(tǒng)要求我們輸入用戶(hù)名密碼完成身份認(rèn)證。

圖片描述

身份認(rèn)證

Spring Security 項(xiàng)目在默認(rèn)配置下,會(huì)自動(dòng)生成一個(gè)名為「user」的用戶(hù),并分配其隨機(jī)密碼,此密碼可以從控制臺(tái)的日志信息中找到:

...
Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336
...

填入用戶(hù)名密碼,點(diǎn)擊登錄,將看到認(rèn)證結(jié)果頁(yè):

圖片描述

認(rèn)證結(jié)果
此時(shí),我們完成了第一個(gè)「Spring Security」實(shí)例。

3. Spring Boot 的默認(rèn)配置項(xiàng)

在剛剛的實(shí)例中,我們并沒(méi)有做任何關(guān)于安全性的配置,但是應(yīng)用系統(tǒng)以及自帶了訪(fǎng)問(wèn)控制,并且生成了一個(gè)測(cè)試用戶(hù),這是怎么做到的呢?答案就在 Spring Security 的默認(rèn)配置中。

在 Spring Boot 方式下啟動(dòng) Spring Security 工程,將會(huì)自動(dòng)開(kāi)啟如下配置項(xiàng):

  • 默認(rèn)開(kāi)啟一系列基于 springSecurityFilterChain 的 Servlet 過(guò)濾器,包含了幾乎所有的安全功能,例如:保護(hù)系統(tǒng) URL、驗(yàn)證用戶(hù)名、密碼表單、重定向到登錄界面等;
  • 創(chuàng)建 UserDetailsService 實(shí)例,并生成隨機(jī)密碼,用于獲取登錄用戶(hù)的信息詳情;
  • 將安全過(guò)濾器應(yīng)用到每一個(gè)請(qǐng)求上。

除此之外,Spring Security 還有一些其他可配置的功能:

  • 限制所有訪(fǎng)問(wèn)必須首先通過(guò)認(rèn)證;
  • 生成默認(rèn)登錄表單;
  • 創(chuàng)建用戶(hù)名為「user」的可以通過(guò)表單認(rèn)證的用戶(hù),并為其初始化密碼;
  • 使用 BCrypt 方式加密密碼;
  • 提供登出的能力;
  • 保護(hù)系統(tǒng)不受 CSRF 攻擊;
  • 會(huì)話(huà)固定保護(hù);
  • 集成安全消息頭;
  • 提供一些默認(rèn)的 Servlet 接口,如:「getRemoteUser」、「getUserPrincipal」、「isUserInRole」、「login」和「logout」。

以上內(nèi)容我們將在后續(xù)的章節(jié)中陸續(xù)向大家介紹。

4. 小結(jié)

圖片描述

流程小結(jié)
本節(jié)作為 Spring Security 的起點(diǎn),展示了如何在 Spring Boot 項(xiàng)目中集成 Spring Security 功能。Spring Security 默認(rèn)情況下會(huì)打開(kāi)用戶(hù)的表單認(rèn)證功能,并創(chuàng)建用戶(hù)名為「user」的測(cè)試用戶(hù),其密碼在系統(tǒng)啟動(dòng)時(shí)生成,可在系統(tǒng)啟動(dòng)日志中找到。

下一節(jié),我們將討論 Spring Security 的安全架構(gòu),了解其設(shè)計(jì)思路。