共计 4568 个字符,预计需要花费 12 分钟才能阅读完成。
前言
在上一章节中,曾经带大家意识了 Spring Security,对其基本概念已有所理解,然而作为一个合格的程序员,最要害的必定还是得动起手来,所以从本篇文章开始,我就带大家搭建第一个 Spring Security 我的项目,看看如何利用 Spring Security 来爱护咱们的 Java Web 我的项目。
一. 搭建 SpringBoot 开发环境
咱们的 Spring Security 系列教程会基于 SpringBoot 环境,并且以案例迭代的形式进行开发,所以为了不便后续案例的编写,咱们先提前搭建一个 SpringBoot 环境的 Web 我的项目。
1. 创立 SpringBoot 我的项目如各位对 SpringBoot 根底不相熟,请参考自己的 SpringBoot 系列教程:blog.csdn.net/syc000666/a…SpringBoot 我的项目的具体创立过程如下图所示。
1.1 创立一个基于 Maven 的 Project 我的项目。
1.2 设置项目名称和存储地位
2. 增加我的项目依赖在 pom.xml 文件中,增加配置 SpringBoot 开发环境的依赖包。
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<spring-platform.version>Cairo-SR3</spring-platform.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!–BOM(bill of materials):资料清单,用于解决 jar 包依赖的好办法 –>
<!-- 缘起:Spring 当初已倒退成一个宏大体系。比方 security、mvc 等。如此一来,不同模块或者与内部进行集成时,依赖解决就须要各自对应版本号。比方,较新 spring 与较老的 quartz,它们集成就会遇到问题,给搭建和降级带来不便。因而 Spring IO Platform 应运而生,只有我的项目中引入了它,内部集成时依赖关系无需版本号。-->
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>${spring-platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 配置地方仓库 -->
<repositories>
<repository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/repository/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
复制代码增加完 SpringBoot 中次要的依赖包之后,咱们就能够在这个环境中进行 Web 我的项目开发了。
二. 创立第一个 SpringSecurity 我的项目咱们在下面的 SpringBoot 开发环境中,创立出第一个 SpringSecurity 模块,具体创立过程略 (嘿嘿)。
1. 增加模块中的 pom 依赖咱们在该 module 中,增加我的项目开发时必要的依赖包,次要是增加 SpringSecurity 的依赖包,在这里会完满体现 SpringBoot 中”约定大于配置“的思维哦。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!– 外围平安依赖 –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. 创立 web 接口接下来咱们轻易编写一个 web 接口,不便前面进行测试。package com.yyg.security.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {return "Hello, 来跟 一一哥 学习 Spring Security 吧!";}
}
3. 创立我的项目入口类 package com.yyg.security;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Demo01Application {
public static void main(String[] args) {SpringApplication.run(Demo01Application.class, args);
}
}
4. 我的项目目录构造此时咱们的我的项目包构造如下图所示:
5. 启动我的项目咱们把我的项目启动起来后,在浏览器中对 Web 接口进行拜访,会发现接口是无奈间接拜访的。在拜访接口之前会主动跳转到 ”/login” 地址,进入到一个登录界面。这是因为 Spring Boot 中 ” 约定大概配置 ” 的规定,只有咱们增加了 Spring Security 的依赖包,就会主动开启平安限度,在拜访 Web 接口之前会进行平安拦挡。只有输出了用户名和明码,能力拜访我的项目中的 Web 接口。
此时登录界面中,要求咱们输出用户名和明码。这个默认的用户名是“user”,明码是一个用 UUID 生成的随机字符串。在每次启动我的项目时,都能够在控制台中看到生成的随机明码,如下图所示:
6. 随机明码生成机制可能有小伙伴会很好奇,这个随机的明码到底是在哪里生成的呢?一一哥 带各位剖析一下 Spring Security 的源码,来看看这个明码的生成策略。这个默认的用户名和明码其实是在 SecurityProperties 类中定义的,源码如下图:
而管制台上打印的明码日志,是在 UserDetailsServiceAutoConfiguration 类的 getOrDeducePassword() 办法中输入的。
咱们只有把这个随机明码,复制粘贴到登录页面的明码框中,就能够拜访 ”/hello” 接口了。
7. 配置 Security 账户从下面的源码剖析可知,默认的登录明码是利用 UUID 生成的随机字符串,很显著如果咱们应用这个字符串作为登录明码,就太麻烦了。那么有没有更不便的登录账户呢?作为一个框架,我能够很负责的通知各位,这必定是有的!所以 Security 框架容许咱们本人配置用户名和明码,并且提供了 2 种形式来进行自定义用户名和明码:①. 在配置文件中定义;②. 在配置类中定义。
7.1 配置用户信息在本案例中带各位采纳配置文件的形式来进行实现,首先咱们创立一个 application.yml 配置文件,配置如下:spring:
security:
user:
name: yyg
password: 123
7.2 setPassword() 源码剖析在这里配置了自定义的用户名和明码后,在 Spring Security 的源码中,会通过调用 SecurityProperties 的 set() 办法 注入到对应的属性中。咱们来看下 SecurityProperties.User#setPassword() 办法的源码:
由此咱们能够看到,passwordGenerated 属性变成了 false,联合上文的源码剖析,咱们就晓得在控制台不会再输入打印明码信息了。
8. 重启我的项目接着咱们重启我的项目,这时候利用咱们本人配置的用户名和明码,就能够拜访 ”/hello” 接口了。
这样咱们只须要增加一个 security 的依赖包,就能够实现 Web 安全控制了。这样,一一哥 就带大家实现了第一个 Spring Security 案例,你会发现,其实代码很简略,增加必要的依赖包,对登录账户做必要的配置就能够了。不晓得第一个案例,你是学会了还是学废了?能够留言评论,通知,我会在前面对内容进行必要的优化!