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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 快速学习 权限管理-整合 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 生成;没有权限会提示信息。

相关文章
|
9月前
|
XML 安全 前端开发
SpringSecurity系列(四) Spring Security 实现权限树形菜单
SpringSecurity系列(四) Spring Security 实现权限树形菜单
103 0
|
Java 数据安全/隐私保护 Spring
SpringSecurity 权限管理的实现
SpringSecurity是一个权限管理框架,核心是认证和授权,前面介绍过了认证的实现和源码分析,本文重点来介绍下权限管理这块的原理。
65 0
|
缓存 Java 数据安全/隐私保护
SpringSecurity实现动态管理权限(三)
SpringSecurity实现动态管理权限(三)
241 0
|
8月前
|
Java 数据安全/隐私保护 Spring
SpringSecurity6从入门到实战之默认用户的生成流程
该文档介绍了SpringSecurity6中默认用户的生成流程。在`SecurityAutoConfiguration`源码中,通过`SecurityProperties`配置类,系统默认创建了一个名为&quot;user&quot;的用户,其密码是一个随机生成的UUID。这个用户是在没有在`application.properties`中设置相关配置时自动创建的。
|
8月前
|
缓存 安全 Java
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)
|
SQL 关系型数据库 MySQL
springSecurity权限表设计
springSecurity权限表设计
185 0
springSecurity权限表设计
|
存储 SQL 数据库
七.SpringSecurity基础-记住我功能实现
SpringSecurity基础-记住我功能实现
|
存储 SQL 数据库
SpringSecurity基础-记住我功能实现
Remember me(记住我)记住我,当用户发起登录勾选了记住我,在一定的时间内再次访问该网站会默认登录成功,即使浏览器退出重新打开也是如此,这个功能需要借助浏览器的cookie实现,具体流程如下
111 0
|
存储 安全 Java
二.SpringSecurity基础-简单登录实现
SpringSecurity基础-简单登录实现
|
安全 Java 编译器
Security1 1(二)|学习笔记
快速学习 Security1 1(二)
Security1 1(二)|学习笔记