权限管理-整合 SpringSecurity(1)| 学习笔记

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习 权限管理-整合 SpringSecurity(1)

开发者学堂课程【微服务+全栈在线教育实战项目演练(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 生成;没有权限会提示信息。

相关文章
|
数据可视化 Go 数据库
WEGO使用—在线GO功能注释
WEGO是华大基因公司的一个在线GO注释的网站,根据网站的介绍:WEGO(网络基因本体注释图)是一个简单但有用的工具,用于可视化,比较和绘制基因本体注释结果。随着围棋词汇越来越流行,WEGO在许多研究中被广泛采用和使用,最新一次的更新是在2018年。
1165 0
|
11月前
|
消息中间件
使用RabbitMQ如何保证消息不丢失 ?
RabbitMQ通过发布者确认、回执机制、消息持久化及消费者确认等方案,确保消息从发送到接收的每个环节都能有效防止丢失。即便如此,特殊情况下仍可能丢失,如系统故障等。为此,可设计消息状态表,记录消息ID、内容、交换机、路由键、发送时间和签收状态等,结合定时任务检查并重发未签收消息,以进一步提升消息传输的可靠性。
207 1
|
存储 安全 中间件
龙蜥社区 FAQ
龙蜥社区问答手册。
|
10月前
|
安全 Kotlin
Kotlin教程笔记(23) -作用域函数
Kotlin教程笔记(23) -作用域函数
207 6
|
存储 JavaScript 前端开发
参数传递方法
参数传递方法
75 2
|
存储 SQL 固态存储
ClickHouse性能优化 2
ClickHouse性能优化
601 0
|
Web App开发 JSON JavaScript
插件制作实战(B站视频评论屏蔽)
插件制作实战(B站视频评论屏蔽)
286 0
|
存储 算法 前端开发
Proxyee代码阅读
本篇文章主要讲述了对开源项目proxyee的代码阅读
|
存储 数据库 C语言
SAP ABAP——数据类型(一)【数据类型概要及分类】
本文主要介绍一下SAP ABAP中关于数据类型的概要以及分类,其中数据类型包括预定义的数据类型,数据字典数据类型,用户自定义数据类型,下面将依次对其进行讲解
2662 0
SAP ABAP——数据类型(一)【数据类型概要及分类】
|
边缘计算 运维 Kubernetes
OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略
在 OpenYurt v1.1.0 版本中,我们提供了 Auto 和 OTA 的升级策略。Auto 的升级策略重点解决由于节点 NotReady 而导致 DaemonSet升级阻塞的问题,OTA 的升级策略主要应对边缘侧用户需要自主控制升级时机的场景。以下对这两种策略做简要的介绍。
OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略