1、SpringSecurity 的简介
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,它是Spring项目组中用来提供安全认证服务的框架,能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案。
Spring Security 的前身是 Acegi Security。它是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。Spring Security采用了AOP(面向切面编程)思想,并基于Servlet过滤器实现。
2、基于 SpringSecurity 的简单的认证
【示例】SpringBoot 整合 SpringSecurity 创建一个简单的认证应用。
(1)创建 SpringBoot 项目,项目结构如下图:
(2)添加 Maven 依赖
在 pom.xml 配置文件中添加 Spring Security 依赖、Thymeleaf 模板引擎。
<!-- Spring Security 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.7.18</version>
</dependency>
<!-- Thymeleaf 模板引擎 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在引入 Spring Security 项目之后,虽然没有进行任何的配置或编辑,但 Spring Security 有一个默认的运行状态(在 WebSecurityConfigurefAdapter 这个抽象类中实现,有 Spring Boot 自动配置生效),要求在经过 HTTP 表单认证后才能访问对应的 URL 资源,其默认使用的用户为 user,密码则是动态生成并打印到控制台的一串随机密码。
(3) 配置登录人员
在 application.yml 配置文件中,配置 Spring Security 的登录人名称和密码。
spring:
# 使用Thymeleaf模板引擎
thymeleaf:
mode: HTML5
encoding: UTF-8
cache: false
servlet:
content-type: text/html
# Spring security 配置
security:
user:
name: panjunbiao
password: 123456
(4)编写控制器类
创建 IndexController 控制器类,实现跳转到首页,同时获取当前登录人的名称。
package com.pjb.securitydemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
/**
* 首页控制器
* @author pan_junbiao
**/
@Controller
public class IndexController
{
/**
* 首页
*/
@RequestMapping("/")
public String index(HttpServletRequest request)
{
//获取当前登录人
String userName = "未登录";
Principal principal = request.getUserPrincipal();
if(principal!=null)
{
userName = principal.getName();
}
//返回页面
request.setAttribute("userName",userName);
return "/index.html";
}
}
(5)编写首页
在 resources\templates 资源目录下,创建 index.html 页面。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
<meta name="author" content="pan_junbiao的博客">
</head>
<body>
<h1 style="color: red">Hello,Spring Security</h1>
<p>博客信息:您好,欢迎访问 pan_junbiao的博客</p>
<p>博客地址:https://blog.csdn.net/pan_junbiao</p>
<p th:text="'当前登录人:' + ${userName}"></p>
<a href="/logout" onclick="return confirm('确认注销吗?');">登出</a>
</body>
</html>
(6)运行项目
(7)成功登录后,跳转至首页
(8)登出
登出的地址:/logout,则跳转至默认的登出页面。