简介
为了督促自己的学习,新开一个坑,就是记录对Spring Security的探究与学习。使用Spring Security的目的是,之前实现后端时,用户验证与鉴权都是手动实现的而过于繁琐。后来了解到了Spring Security对Web的安全有很好的支持,因此打算系统地学习一下Spring Security,并将学习过程中的思考和见解一并分享出来,欢迎批评指出。
什么是Spring Security
先读官方文档对其的定义:
Spring Security是一个框架,提供了身份验证、授权和针对常见攻击的保护。
Spring Security是一个轻量级的安全框架,能为基于Spring的Java Web应用程序的安全提供保证。Spring Security能与Spring MVC很好地集成,因此如果项目是基于Spring搭建的,那么在原本项目的基础上加入Spring Security来进行安全校验是一个较好的选择。
快速开始
我们先来快速地搭建一个基础项目,实现Spring Security所提供的功能吧。首先,笔者所使用的的环境和IDE具体为:
- AdoptOpenJDK 11
- IntelliJ IDEA 2020.1.2 x64
推荐使用IDEA新建项目中选项中的Spring Initializr,使用该初始化器能够快速地搭建一个SpringBoot项目,并且可以自由地选择将要使用的组件,本文选择Spring Security组件。生成项目后,打开pol.xml文件看一下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
需要注意的是,本文所使用的的SpringBoot版本为2.4.5。
此时,直接运行该SpringBoot项目,打开浏览器访问localhost:8080/login
,可以看到如下画面:
这是Spring Security为我们默认生成的登录页面,并且用户名是user,密码是IDEA控制台打印出来的一串密码。到目前为止,Spring Security已经快速地集成到我们的项目中了,但这一切都是默认提供的,我们希望能够使用自定义的登录页面。下面介绍Spring Security的进一步使用。
往前一步
Spring Security提供了灵活的可定制化的配置,可以根据项目具体情况来进行不同的配置以实现不同的安全功能。Spring Security中进行配置的操作是在WebSecurityConfigurerAdapter
,我们只需要继承该类,并重写configure
方法即可。本文不会对各种类和接口进行繁琐的介绍,力求最快速地实现。因此下面我们介绍怎么样自定义登录页面。
Step.1 准备前端页面
我们先准备几个需要访问的页面,分别是登录页面、登录成功页面和登录失败页面。显然,登录成功和登录失败的页面是需要验证才能访问的,而登录页面则不需要任何的验证。下面的HTML页面均放置于resources/templates
文件夹下。
1. login.html
<!DOCTYPE html>
<html lang="cn">
<head>
<meta charset="UTF-8">
<title>简单登录页面</title>
</head>
<body>
<h3>简易表单登录</h3>
<form action="/doLogin" method="post">
<table>
<tr>
<td