1. SpringSecurity是什么
SpringSecurity基于Spring框架,提供了一套Web应用安全性的完整解决方案
一般来说,Web应用的安全性包括用户认证(Authenticataion)和用户授权(Authorization)两个部分。
Spring Security具有两个重要核心功能:
(1)用户认证:用户能否登录
(2)用户授权:指定当前用户可以操作哪些功能
官网:https://spring.io/projects/spring-security
2. 权限模块数据模型
用户表t_user、权限表t_permission、角色表t_role、菜单表t_menu、用户角色关系表t_user_role、角色权限关系表t_role_permission、角色菜单关系表t_role_menu。
表之间关系如下图:
权限模块共涉及到如上7张表。其中,角色表最为重要,处于核心位置,因为用户、权限、菜单都和角色是多对多关系。
认证和授权过程中分别会使用到不同的表,所需表如下:
- 认证过程:只需要用户表。在用户登录时查询用户表t_user进行校验,判断用户输入的用户名和密码是否正确。
- 授权过程:上示图中七张表都会被使用。用户必须完成认证之后才可以进行授权,首先可以根据用户查询其角色,再根据角色查询对应的菜单,这样就确定了用户能够看到哪些菜单。然后再根据用户的角色查询对应的权限,这样就确定了用户拥有哪些权限。
3. 初始项目创建
3.1 导入Spring Security环境——添加对应Maven坐标
<!-- 安全框架 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SpringSecurityDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringSecurityDemo Maven Webapp</name>
<!-- FIXME change it to the project's we