当前位置: 首页 > news >正文

Spring-Security基础知识如门

基本概念

什么是认证

进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。

系统为什么要认证?

认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。

认证:用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手机短信登录,指纹认证等方式。

什么是会话

用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于 session 方式、基于 token 方式等。

什么是授权

还拿微信来举例子,微信登录成功后用户即可使用微信的功能,比如,发红包、发朋友圈、添加好友等,没有绑定银行卡的用户是无法发送红包的,绑定银行卡的用户才可以发红包,发红包功能、发朋友圈功能都是微信的资源即功能资源,用户拥有发红包功能的权限才可以正常使用发送红包功能,拥有发朋友圈功能的权限才可以使用发朋友圈功能,这个根据用户的权限来控制用户使用资源的过程就是授权。

为什么要授权?

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

授权: 授权是用户认证通过根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则正常访问,没有权限则拒绝访问。

RBAC

基于角色的访问控制

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

if(主体.hasRole("总经理角色id")){查询工资
}

问题:如果查询工资的角色变化为总经理和部门经理,还有项目经理可访问,此时就需要修改判断逻辑

if(主体.hasRole("总经理角色id") || 主体.hasRole("部门经理角色id") 
|| 主体.hasRole("项目经理角色id")){查询工资
}

根据上边案例发现,当需要修改角色的权限时就需要修改授权的相关代码,系统可拓展性差

基于资源的访问控制

按资源进行授权(Resource-Based Access Controller)

代码案例:

if(主体.hasPermission("查询公司权限标识")){查询工资
}

优点:系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化,都不需要修改授权代码,系统可扩展性强

SpringSecurity

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。

SpringSecurity的核心功能:

用户认证(Authentication):系统判断用户是否能登录

用户授权(Authorization):系统判断用户是否有权限去做某些事情

SpringSecurity 特点:

Spring 技术栈的组成部分,与Spring 无缝整合。

全面的权限控制,能提供完整可扩展的认证和授权支持保护

专门为 Web 开发而设计。

重量级,需要引入各种家族组件与依赖

SpringSecurity 快速入门

创建springboot项目

对应的pom文件中的核心jar

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

运行项目显示的页面

该页面在登录的时候默认的用户名是user密码显示在控制台

输入用户名和密码后即可访问成功。

权限管理中的相关概念:

名称

英文名称

概念

主体

principal

使用系统的用户或设备或从其他系统远程登录的用户等等

认证

authentication

权限管理系统(通过登录操作)确认一个主体的身份,允许主体进入系统。简单说就是“主体”证明自己是谁。

授权

authorization

给用户分配权限:将操作系统的“权力”“授予”“主体”,这样主体就具备了操作系统中特定功能的能力。

入门案例及权限实战

http://t.csdnimg.cn/xf8nU

相关文章:

  • QTcpServer 封装
  • 使用Redis实现文章阅读量、收藏、点赞数量记录功能
  • Postman汉化教程
  • vue中 process.env 对象为空对象问题
  • day12-内核与文件系统衔接流程
  • css控制卡片内部的左右布局
  • 高等数学教材啃书汇总重难点(二)导数与微分
  • RPA在财务预测和分析中的应用
  • Bard和ChatGPT的一些比较
  • 现一个智能的SQL编辑器
  • 一手app拉新地推平台和网推平台升级啦 官签渠道直营
  • 工业物联网模块应用之砂芯库桁架机器人远程无线控制
  • 支持内录系统声音的Mac录屏软件Omi Recorder
  • cmakelist、cmake、makefile、make以及gcc的关系和区别
  • ZZ308 物联网应用与服务赛题第G套
  • 【5+】跨webview多页面 触发事件(二)
  • Codepen 每日精选(2018-3-25)
  • ComponentOne 2017 V2版本正式发布
  • egg(89)--egg之redis的发布和订阅
  • Flex布局到底解决了什么问题
  • Golang-长连接-状态推送
  • input实现文字超出省略号功能
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript标准库系列——Math对象和Date对象(二)
  • LeetCode算法系列_0891_子序列宽度之和
  • SSH 免密登录
  • tweak 支持第三方库
  • 工作手记之html2canvas使用概述
  • 每天10道Java面试题,跟我走,offer有!
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 那些年我们用过的显示性能指标
  • 前言-如何学习区块链
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 【云吞铺子】性能抖动剖析(二)
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 我们雇佣了一只大猴子...
  • ​iOS实时查看App运行日志
  • ​马来语翻译中文去哪比较好?
  • ${ }的特别功能
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (算法)Game
  • (转)socket Aio demo
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .Net MVC4 上传大文件,并保存表单
  • .NET Standard 的管理策略
  • .NET 中让 Task 支持带超时的异步等待
  • .Net(C#)自定义WinForm控件之小结篇
  • ?
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [Django 0-1] Core.Checks 模块
  • [ffmpeg] 定制滤波器
  • [FT]chatglm2微调
  • [IE9] IE9 Beta崩溃问题解决方案