文章目录
Spring Security
一、Spring Security介绍
1、框架介绍
Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
(2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。
Spring Security其实就是用filter,多请求的路径进行过滤。
(1)如果是基于Session,那么Spring-security会对cookie里的sessionid进行解析,找到服务器存储的sesion信息,然后判断当前用户是否符合请求的要求。
(2)如果是token,则是解析出token,然后将当前请求加入到Spring-security管理的权限信息中去
2、认证与授权实现思路
如果系统的模块众多,每个模块都需要就行授权与认证,所以我们选择基于token的形式进行授权与认证,用户根据用户名密码认证成功,然后获取当前用户角色的一系列权限值,并以用户名为key,权限列表为value的形式存入redis缓存中,根据用户名相关信息生成token返回,浏览器将token记录到cookie中,每次调用api接口都默认将token携带到header请求头中,Spring-security解析header头获取token信息,解析token获取当前用户名,根据用户名就可以从redis中获取权限列表,这样Spring-security就能够判断当前请求是否有权限访问
二、整合Spring Security
1、在common下创建spring_security模块
2、在spring_security引入相关依赖
<dependencies>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Spring Security依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
</dependencies>
3、在service_acl引入spring_security依赖
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>spring_security</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
代码结构说明:
三、创建自定义查询用户类
(1)在service_acl模块创建,因为其他模板不会用到
四、后端接口和前端页面对接
1、在前端项目中下载依赖
npm install --save vuex-persistedstate
2、替换相关文件
3、在node_modules文件夹中替换element-ui依赖
Security分析
项目结构为两大模块,首先是acl,为五张表中对应的三层。
另一个为spring security的配置模块
后端执行大致流程:
首先登陆请求会进入认证过滤器TokenLoginFilter.java
验证user 之后进入service_acl中的UserDetailServiveImpl中
仍然是返回到认证过滤器TokenLoginFilter.java
在上图这里得到当前的用户并根据用户名生成token存到redis中,存取的格式为 登陆用户名:当前用户权限列表,其中已经做了其他的判断,比如说密码加密等。
前端执行大致流程:
首先进入登录页
(使用分发方式异步发出请求 执行store下面的子组件mudules中user.js中的Login方法)
来到store下面的子组件mudules中user.js中的Login方法
可以看到在api下面是发出请求了的
请求成功后将返回信息token放在cookies中
返回回到登录index中,进行路由跳转
跳转的时候就会进入下面的方法
后面的大致了解