Spring Security是目前Java后台管理系统中使用最常见的安全认证框架之一。它的上手没Shiro那么直观。Shiro是可以直接开个javaSE应用验证的,但Spring Security基本要求和web关联起来。刚开始看甚至不知道从何入手。最近决定静下心来好好学习一下Spring Security的使用。
Spring Security不像Shiro那样需要众多配置。它有很多默认的设置,甚至连默认登录页都替使用者准备了。作为快速开始,我们先看看Spring Security的默认效果,再逐步把默认的设置改为自定义方式。
新建一个maven项目,pom如下。
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <groupId>com.sadoshi.springsecuritygroupId>
- <artifactId>test1artifactId>
- <version>0.0.1-SNAPSHOTversion>
-
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.7.18version>
- <relativePath />
- parent>
- <properties>
- <java.version>1.8java.version>
- properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-securityartifactId>
- dependency>
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
-
- project>
新建启动类App
- package com.sadoshi.springsecurity;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
-
- @SpringBootApplication
- public class App {
-
- public static void main(String[] args) {
- SpringApplication.run(App.class, args);
- }
-
- }
新建控制类HelloController
- package com.sadoshi.springsecurity.controller;
-
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- public class HelloController {
-
- @RequestMapping("/hello")
- public String hello() {
- return "hello";
- }
- }
接着我们启动App类,然后在浏览器地址栏输入:http://localhost:8080/hello。然后你会发现浏览器重定向到 http://localhost:8080/login
上面这个就是Spring Security的默认登录页。它拦截了用户的访问请求,重定向到默认登录页。接着我们要登录,默认的用户名是user,密码则是启动时随机生成,看下程序启动时的控制台输出:
红色框框的就是密码。我们输入帐号名和密码,就能打开/hello的页面.
目前我们的项目还没有配置文件,为了方便后续一些配置,我们在resource目录下添加application.yml配置文件:
- server:
- port: 8082
我们把端口设置为8082。
Spring Security使用过滤器完成拦截操作。贴张官网的图:
可以看到从客户访问系统,经过过滤器链。而Spring Security则是其中的一串SecurityFilterChain。我们可以通过源码断点调试看下Spring Security都添加了哪些过滤器:
通过断点可以看到Spring Security添加了15个过滤器。从名字看第五个的UsernamePasswordAuthenticationFilter应该就是校验用户名密码的过滤器。学习Spring Security也是围绕着这些过滤器学习
本文我们发现引入Spring Security使用非常快捷,Spring Security有很多默认配置的东西,包括默认登录界面,默认用户名密码。这也让我们有很多疑问,比如如何替换默认登录页,如何设置让其读取数据库里保存的用户名密码,如何设置让Spring Security只拦截部分页面等。这些都会在后面的文章中学习。