SpringSecurity专题

news2024/9/22 0:59:57

目录

一:认证授权

什么是认证授权:

二:权限数据模型

RBAC权限数据模型 

 2.1基于角色访问权限控制

2.2基于资源访问权限控制

 常见的认证方式

1.Cookie-Session

2.jwt令牌无状态认证

 三:JWT

1.JWT的组成 

2.JWT的使用 

四:SpringSecurity

五:总结


一:认证授权

什么是认证授权:

认证:

在互联网中,我们每天都会使用到各种各样的APP和网站,在使用过程中通常还会遇到需要注册登录的情况,输入你的用户名和密码才能正常使用,也就是说成为这个应用的合法身份才可以访问应用的资源,这个过程就是认证。认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。

当然认证的方式有很多,常见的账号密码登录,手机验证码登录,指纹登录,刷脸登录等等。

简单说: 认证就是让系统知道我们是谁。

授权:

认证是为了保护身份的合法性,授权则是为了更细粒度的对数据进行划分,授权是在认证通过的前提下发生的。控制不同的用户能够访问不同的资源。

二:权限数据模型

授权过程中,我们需要知道如何对用户访问的资源进行控制,需要了解一些简单的授权数据模型。授权可以非常简单的理解成谁(Who)对什么资源(What)进行怎么样(How)的操作。

名词含义备注
Who主体(Subject)一般指用户,也可以是应用程序
What资源(Resource)例如商品信息,订单信息,页面按钮或程序中的接口等信息
How权限(Permission)规定了用户或程序对资源操作的许可。例如普通用户只能查看订单,管理员可修改或删除订单,这是因为普通用户和管理员用户对订单资源的操作权限不一样。

关系图概述:

 

RBAC权限数据模型 

 2.1基于角色访问权限控制

RBAC基于角色的访问控制(Role-Based Access Control)是按角色进行授权,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等,访问控制流程如下:

基于以上模型可以将其转换为相关代码如下: 

if(主体.hasRole("总经理角色标识")){
    //查询工资 
}else{
    //权限不足
}

 如果上图中查询工资所需要的角色变化为总经理和部门经理,此时就需要修改判断逻辑为“判断用户的角色是否是 总经理或部门经理”,修改代码如下:

if(主体.hasRole("总经理角色标识") || 主体.hasRole("部门经理角色标识")){ 
	//查询工资 
}else{
    //权限不足
}

2.2基于资源访问权限控制

RBAC基于资源的访问控制(Resource-Based Access Control)是按资源(或权限)进行授权。

 

基于第二种方式以上的需求就变成了如下:

if(Subject.hasPermission("查询员工工资的权限标识")){
	// 查询员工工资
}

因此,使用基于资源访问权限控制的优点如下:

系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化为总经理和部门经理也不需要修授权代码,系统可扩展性强

 常见的认证方式

1.Cookie-Session

该种认证机制的总体流程如下:

但是该种认证方式也有以下弊端:

  • 只能在 web 场景下使用,如果是 APP 中,不能使用 cookie 的情况下就不能用了;

  • 即使能在 web 场景下使用,也要考虑跨域问题,因为 cookie 不能跨域;(域名或者ip一致,端口号一致,协议要一致)

  • cookie 存在 CSRF(跨站请求伪造)的风险;

  • 如果是分布式服务,需要考虑 Session 同步(同步)问题;

  • session-cookie机制是有状态的方式(后端保存主题的用户信息-浪费后端服务器内存)

2.jwt令牌无状态认证

JSON Web Token(JWT-字符串)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

 该种认证方式的总体流程如下:

使用第二种方式的优点:

A. 使用 json 作为数据传输,有广泛的通用型,并且体积小,便于传输;

B. 不需要在服务器端保存相关信息,节省内存资源的开销;

C. jwt 载荷部分可以存储业务相关的信息(非敏感的),例如用户信息、角色等;  

 三:JWT

JSON Web Token(JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。该token被设计为紧凑且安全的,特别适用于前后端无状态认证的场景。

1.JWT的组成 

  • 部(Header)(非敏感)

    • 头部用于描述关于该JWT的最基本的信息,例如数据类型以及签名所用的算法等,本质是一个JSON格式对象;

    • 举例说明

      • {"typ":"JWT","alg":"HS256"} 解释:在头部指明了签名算法是HS256算法,整个JSON对象被BASE64编码形成JWT头部字符串信息;

      • BASE64编码详见:在线加密解密,编码后的字符串:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

      • 值得注意的是BASE64不是加密算法,可进行正向编码和反向解码处理;

  • 载荷(playload)(非敏感数据)

    • 载荷就是存放有效信息的地方,该部分的信息是可以自定义的;

    • 载荷payload格式:{"sub":"1234567890","name":"John Doe","admin":true}

    • 载荷相关的JSON对象经过BASE64编码形成JWT第二部分:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG7CoERvZSIsImFkbWluIjp0cnVlfQ==

  • 签证(signature)

    • jwt的第三部分是一个签证信息,这个签证信息由三部分组成:签名算法( header (base64后的).payload (base64后的) . secret )

    • 这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret秘钥组合加密,然后就构成了jwt的第三部分:TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

最后将这三部分用●连接成一个完整的字符串,构成了最终的jwt:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG7CoERvZSIsImFkbWluIjp0cnVlfQ==.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

2.JWT的使用 

1.先导入依赖包:

<dependencies>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
</dependencies>

2.生成JWT令牌


@Test
public void testGenerate(){
    String compact = Jwts.builder()
        .setId(UUID.randomUUID().toString())//设置唯一标识
        .setSubject("JRZS") //设置主题
        .claim("name", "nineclock") //自定义信息
        .claim("age", 88) //自定义信息
        .setExpiration(new Date()) //设置过期时间
        .setIssuedAt(new Date()) //令牌签发时间
        .signWith(SignatureAlgorithm.HS256, "itheima")//签名算法, 秘钥
        .compact();
    System.out.println(compact);
}

四:SpringSecurity

  • Spring Security是基于Spring的安全框架,提供了包含认证和授权的落地方案;

  • Spring Security底层充分利用了Spring IOC和AOP功能,为企业应用系统提供了声明式安全访问控制解决方案;

  • SpringSecurity可在Web请求级别和方法调用级别处理身份认证和授权,为应用系统提供声明式的安全访问控制功能;

官网地址: Spring Security

五:总结

Spring Security具有以下几个优点:

1. 综合性:Spring Security提供了一套完整的安全解决方案,包括身份验证、授权、会话管理等功能,能够满足大多数应用的安全需求。

2. 灵活性:Spring Security提供了丰富的配置选项和扩展点,可以根据具体需求进行定制和扩展。开发人员可以根据自己的业务逻辑和安全需求,自定义认证和授权规则,以及会话管理策略。

3. 集成性:Spring Security可以与各种其他框架和技术进行集成,如Spring框架、Spring Boot、OAuth2、LDAP、CAS等。它可以无缝与现有的应用程序和基础设施集成,使开发者可以更方便地使用和扩展安全功能。

4. 安全性:Spring Security提供了多种密码编码算法和安全策略,能够确保用户密码的安全存储和传输。它还提供了安全事件和日志记录功能,方便进行安全审计和监控。

5. 社区支持:Spring Security是一个成熟且广泛使用的安全框架,具有庞大的开发者社区。开发者可以从社区中获取大量的学习资源、示例代码和解决方案,以及获得及时的技术支持。

综合来看,Spring Security是一个功能强大、灵活、易用且安全可靠的安全框架,能够满足大多数应用的安全需求,是开发企业级应用程序的首选安全解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1948054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STC32G12K128开发板】第3-7讲:声音探测传感器

第3-7讲&#xff1a;声音探测传感器 学习目的了解声音探测传感器模块的作用。掌握单片机编程读取声音探测传感器模块引脚输出状态&#xff0c;从而判断周围环境声音强度有没有达到设置的阈值。 声音探测传感器简介 声音探测传感器模块对环境声音强度敏感&#xff0c;常用来检测…

解决Linux桌面初始化问题

问题 启动vnc桌面&#xff0c;提示问题 定位 从[t]csh手册 可以看到&#xff0c;其初始化流程 经定位&#xff0c;是.cshrc的这段代码存在&#xff0c;导致桌面初始化异常。 [wanlin.wangicinfra-cn-172-16-0-115 ~]$ cat .cshrc ...部分省略... # Environment for anac…

模拟电子技术-实验五 单管放大电路仿真实验

实验五 单管放大电路仿真实验 一&#xff0e;实验类型 二&#xff0e;实验目的 1、熟悉multisim的仿真实验法&#xff0c;熟悉multisim中双踪示波器和信号发生器的设置和使用方法。学习电压表的使用方法。 2、熟悉放大电路的基本测量方法&#xff0c;了解使放大电路不失真地…

Spring中@PostConstruct注解的使用

1.描述 1.1 背景 最近在做一个系统交互日志模块&#xff0c;要监控一个http请求&#xff0c;并记录请求与响应日志。项目中使用RestTemplate来发送http请求&#xff0c;所以打算给RestTemplate设置拦截器&#xff0c;来进行自定义操作。但是&#xff0c;只对当前类生效&#x…

《昇思25天学习打卡营第23天|RNN实现情感分类》

使用RNN进行情感分类&#xff1a;基于IMDB数据集的LSTM应用 引言 情感分析是自然语言处理&#xff08;NLP&#xff09;中的一个重要应用&#xff0c;广泛用于电影评论、社交媒体等文本数据的情感分类任务。本文将介绍如何使用递归神经网络&#xff08;RNN&#xff09;实现情感…

InternLM学习笔记

入门岛 1. Linux基础知识 2. Python 基础知识 from collections import Countertext """ Got this panda plush toy for my daughters birthday, who loves it and takes it everywhere. Its soft and super cute, and its face has a friendly look. Its a …

[linux] seqeval安装报错

新建一个新的环境 然后安装&#xff1a; # 不能拷贝别人的环境再安mebert_wash的环境。有冲突。我需要重新安一个空的conda环境&#xff0c;再安装。 # conda create -n wash python3.10 ipykernel python -m pip install --upgrade setuptools python -m pip install --upgr…

函数-递归调用

目录 一、基本介绍 二、递归能解决什么问题&#xff1f; 三、递归案例 1、打印问题 2、阶乘问题 四、递归重要规则 五、课堂练习 1、斐波那契数 2、猴子吃桃问题 3、汉诺塔 一、基本介绍 1、简单地说&#xff1a;递归就是函数自己调用自己&#xff0c;每次调用时传入…

利用python自动化运维i脚本实现远程连接服务器并实现相应命令

目录 前言&#xff1a; 一.调用的python库介绍 二.在主机上安装好相应的库 2.1激活虚拟环境 三.代码实现以及解析 四.效果的实现 五.致谢 前言&#xff1a; 在当今快速发展的技术环境中&#xff0c;自动化运维已成为 IT 基础设施管理的关键组成部分。它不仅可以显著提…

SPSS个人版是什么软件

SPSS是一款数据统计、分析软件&#xff0c;它由IBM公司出品&#xff0c;这款软件平台提供了文本分析、大量的机器学习算法、数据分析模型、高级统计分析功能等&#xff0c;软件易学且功能非常强大&#xff0c;可以使用SPSS制作图表&#xff0c;例如柱状、饼状、折线等图表&…

CasaOS设备使用Docker安装SyncThing文件同步神器并实现远程管理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于 HTML+ECharts 实现智慧景区数据可视化大屏(含源码)

构建智慧景区数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 随着旅游业的蓬勃发展&#xff0c;智慧景区的概念逐渐深入人心。通过数据可视化&#xff0c;景区管理者可以实时监控游客流量、设施使用情况以及环境状况&#xff0c;从而提升游客体验和管理效率。本文将详…

昇思学习打卡-22-生成式/DCGAN生成漫画头像

文章目录 DCGAN网络数据处理构造网络生成器判别器损失函数优化器 结果展示 我们将学习DCGAN网络如何数据处理、设置网络&#xff0c;包括生成器、判别器、损失函数、优化器等。 DCGAN网络 DCGAN&#xff08;深度卷积对抗生成网络&#xff0c;Deep Convolutional Generative Ad…

数据结构之《队列》

在数据结构之《栈》章节中学习了线性表中除了顺序表和链表外的另一种结构——栈&#xff0c;在本篇中我们将继续学习另一种线性表的结构——队列&#xff0c;在通过本篇的学习后&#xff0c;你将会对栈的结构有充足的了解&#xff0c;在了解完结构后我们还将进行栈的实现。一起…

JavaScript——变量与运算符、输入输出、判断、循环

文章目录 前言概述使用 js从文件引入 js 代码importjs 的作用变量计算输入格式化输出保留小数向上取整&#xff0c;向下取整条件判断循环总结 前言 为了监督自己的进度&#xff0c;把学习任务一点点都写出来&#xff0c;写多少就算多少&#xff0c;不求完美&#xff0c;只求完…

计算的是如何工作的

文章目录 一. 冯诺依曼体系结构二. CPU三. 指令*四. CPU是如何执行指令的 一. 冯诺依曼体系结构 冯诺依曼是计算机领域的祖师爷, 被评为"二十一世纪最伟大的"全才"" 冯诺依曼提出了冯诺依曼体系结构, 定义了一台计算机, 由这几部分构成: 输入设备: 包括…

STM32---HAL库外设配置--串口外设配置及使用

一&#xff1a;首先按照本人的时钟配置博客配置&#xff0c;配置好基础时钟 二&#xff1a;选择对应串口进行选中,然后配置 配置如下&#xff1a;首先配置成异步收发模式&#xff0c;如图中的序号1 参数设置界面选择默认即可如下图 下图中的1不用设置&#xff0c;默认即可。2…

增长新引擎,构建基于 CDP 的用户运营竞争力

本文将围绕“企业如何通过构建基于 CDP 的用户运营体系提升业务增长”这一核心&#xff0c;详细介绍企业数据化运营现状&#xff0c;拆解用户运营目标&#xff0c;展示神策 CDP 的关键能力以及用户运营策略落地的完整路径。 一、洞察&#xff1a;企业数据化运营面临的挑战 当前…

系统编程--Linux下文件的“其他操作”函数

这里写目录标题 文件存储理论补充dentry、inode 文件其他操作stat函数作用函数原型代码&#xff08;以获取文件大小为例&#xff09;补充&#xff08;获取文件类型&#xff09; lstat函数作用函数原型代码补充&#xff08;获取文件权限&#xff09;总结 tipslink函数作用简介函…

看板项目之vue代码分析

目录&#xff1a; Q1、vue项目怎么实现的输入localhost&#xff1a;8080就能自动跳到index页面Q2、组合饼状图如何实现Q3、vue项目如何实现环境的切换Q4、vue怎么实现vue里面去调用js文件里面的函数 Q1、vue项目怎么实现的输入localhost&#xff1a;8080就能自动跳到index页面 …