开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):权限管理-整合 SpringSecurity(1)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11533
权限管理-整合 SpringSecurity(1)
内容介绍
一、整合 SpringSecurity 权限框架(代码整合)
二、代码的结构
一、整合 SpringSecurity 权限框架(代码整合)
1、创建 spring_security 模块,位于 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>
common_utils
是其中要用到的一些相关类,spring-boot-starter-security 是 Spring Security 的一些权限框架,需要引入,过程中需要联网下载依赖,需要等待,等待下载完成,如果下载失败,就将仓库中的依赖直接下载复制过去,因为里面会涉及到权限复制的依赖。
Jjwt 之前说的那个 toking,生成 toking 的字符块。
3、到源码里面复制整合的代码
在 day18这边后端整合代码,里面有个 spring_security,将 com 里面这些代码直接复制进去,
里面不需要配置文件,因为他就是整合的一些相关配置。
4、复制工具类到 common_utils
MD5.java和Responseutil.Java,
5、整合代码的结构
详细介绍一下每个类,各节类的名字是随便起,只是其中的内容有些是固定的。
(1)tokenwebsecurityconfig 是一个配置类,做 spring_security 需要一个核心配置类,就添加 config 这个配置类,里面会添加一些核心内容。
(2).entity 是一些相关的实体类,应用 spring security 中会用到一些相关的实体类,这些实体类,是 security 中本身用到的,就要自己创建实体类。
(3).filter 下是两个过滤器,对应的就是 spring security 下的两部分,
Spring security 包含两个部分,用户认证和用户授权,第一个对应授权过滤器,第二个对应认证过滤器。
(4).在 security 包中有4个类,四个类是四个工具类,第一个是密码处理,因为密码都是加密;第二个是退出该怎么做;第三个是 token 生成工具,token 类工具;第四个是未授权怎么处理,会给摆一个值.
二、代码的结构
1. 核心配置类,名字是随便写的,tokenwebsecurityconfig 要求这个类要记上一个类(WebSecurityConfigurerAdapter),这是 springsecurity 中的核心配置类,核心配置 Configuration 是一个核心配置类,里面加上 security 的注解,开启语言控制,里面是一些基本内容,内容都是固定的,不需要写。
/**
*配置设置
*@param http
第一个是构造,在构造里面可以传一些参数,参数的意思。
(1) .private UserDetailsService userDetailsService:(自定义查询数据库的类)做认证的时候,或者登陆时,需要查询数据库,如下图,查询用户数据库,得到用户名和密码,登陆进去后,再查询用户权限列表,所以这个类的意思就是自己写一个类,让他去查询数据库,查数据库的过程需要自己写,之后将数据返回给 service。
(2).Private TokenManager tokenManager; "生成 token 工具;
(3).private DefaultPasswordEncoder defaultPasswordEncoder;密码等处理
(4).private RedisTemplate redisTemplate;数据要放在 redisTemplate;
用构造创建进来:
this. redisTemplate = redisTemplate;
/**
*配置设置
*@param http
@throws Exception 在 ease excel 中应用过,
2.基础配置
(1). *配置设置
*/
固定结构不需要改变,有一个地方例外,logoutUrl,设置需要退出的地址,里面有几个地址,地址没有特别要求,因为是 springsecurity 帮用户退出,需要修改也就这一个地方,退出修改地址。
(2).*密码处理
*@param auth
*@throws Exception
因为是 mD5加密,包括在密码处理类 Defaltpasswordencoder 中也是 MD5加密。
(3). *配置哪些请求不拦截
@param web
@throws Exception
*/
设置当前操作一些操作可以没有权限,swagger 不需要权限,可以直接做测试,如果有其他测试,按照结构添加就可以,
3.实体类
在做 spring security 中需要做一个实体类,实体类中有
实体类中有个要求,userdetails,实现了一个接口,这个接口是由 springsecurity 中结出的一个接口,所以在springsecurity 中用接口的内容做 springsecurity 的分装,在写的时候就需要自己写一个类,
在类中这个接口就可以做到,
/**
*<p>
*安全认证用户详情信息
*</p>
public class SecurityUser implements UserDetails {
//当前登录用户
private transient User currentUserInfo;
//当前权限
private List<String> permissionValueList;
这个类中需要存入当前用户信心,所以应用了user,
private static final long serialVersionUID= 1L;
@ApiModelProperty(value =”微信openid")
private String username;
@ApiModelProperty(value = "密码")
private String password
@ApiModelProperty(value = "昵称)
private String nickName;
@ApiModelProperty(value = "用户头像")
private String salt;
@ApiModelProperty(value = "用户签名")
private String token;
以上是两个实体类,用于 springsecurity 数据存储,要求是必须实现接口 userdetails,是一个固定的写法,不需要写要求能够看懂。
4.TokenAuthenticationFilter
Tokenloginfilter
* <p>
*登录过滤器,继承 UsernamePassrordAuthenticationFilter, 对用户名密码进行登录校验
要求必须要继承,UsernamePassrordAuthenticationFilter 作为认证,这个类中有认证的方法
第一个方法:构造来传递参数,
第二部分:
作用是:假如在页面输入用户名跟密码,得到输入的用户名跟密码,之后进行认证,认证成功应用一个方法,认证失败应用另一个方法,认证成功后要将数据放到 radios 中,在这个过程中要生成 token,应用方式类JWT将其生成,此为登录的过滤器,登陆密码然后查过滤器。
认证成功应用①方法,
并且生成 token 值,做一个返回。
5.授权过滤器,
private UsernamePasswordAuthenticationToken getAuthent ication(HttpServletRequestrequest{
// token 置于 header 里
从 header 中获取 token,判断是否有权限,获取之后判断当前用户是否有获取菜单的权限,若有直接进行操作,没有权限直接提示没有权限,即由 springsecurity 给当前用户赋予权限,可以进行相应操作,这就是授权的过滤器,
6.工具类
//清空当前用户缓存中的权限数据
String userName = tokenManager. getUserFromToken (token) ;
ResponseUtil. out(response,R. ok());
代码中有两个工具类,MD5.java 和 Responseutil.Java, 复制工具类到 common_utils,在 common_utils 中多了两个工具类,一个是 MD5,另一个是 Responseutil,是之前复制过的,因为需要这两个,如果不复制,就提示找不到,因此需要将两个工具类复制进来。
这个过程是一个固定的过程,结构也是固定的,
代码主要分为
①核心配置类,设置的主要是退出的地方,
②实体类,实体类中有几个接口,这个接口是由 security 提供的,所以要放置到 security 中,
③filter 登录和授权的 filter ,登录的地方有个设置,/admin/acl/login 设置当前请求登陆的地址,这个地址也是随便写的,没有固定,因为登录不是由用户制作,而是由security制作。认证过滤器,用 security 认证授权以后,用户才能进行认证操作,先认证成功,再进行授权。
④工具类:密码处理进行 MD5加密;退出移除 token 值;token 生成工具用 JWP 生成;没有权限会提示信息。