前言
在上一章节中,曾经带大家意识了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案例,你会发现,其实代码很简略,增加必要的依赖包,对登录账户做必要的配置就能够了。不晓得第一个案例,你是学会了还是学废了?能够留言评论,通知,我会在前面对内容进行必要的优化!