【Spring Security系列】一文带你了解权限框架与Spring Security核心概念

权限框架

权限框架是软件开发中用于管理用户权限和访问控制的工具。在企业或者我们毕设复杂的系统中,不同的用户或角色需要拥有不同的访问和操作权限,以确保系统的安全性和数据完整性。今天我们就讨论一下Java中的安全框架!

流行的安全框架

在这里插入图片描述

在企业的开发中,Spring Security,Shiro都是比较流行的权限框架,它们可以用于为应用程序提供安全访问控制功能。下面我们来学习一下它们。

Spring Security

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架(声明式哦)。

它充分利用了Spring IoC、DI和AOP功能,为我们的应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

Spring Security的核心概念主要包括认证和授权。认证就是验证用户身份的过程,通常涉及用户名和密码等凭据的校验。授权则是验证用户是否有权限执行特定操作或访问特定资源。Spring Security他给我们提供了丰富的功能,可以用来做角色管理、权限控制、单点登录。

Shiro

Shiro是一个强大且易用的Java安全框架,它为我们提供了认证、授权、加密和会话管理等功能。

在这里插入图片描述

Shiro可以工作在任何应用环境中,不仅支持Web项目,还支持非Web项目。它具有低依赖性,不需要任何框架和容器,可以独立运行。

Shiro的关键对象包括主体、权限和角色。主体是需要访问资源的用户或程序,权限则是用于控制对资源的访问。Shiro通过角色来管理用户的权限,不同的角色可以拥有不同的权限集合。

Spring Security和Shiro的区别

  • 集成与依赖上:Spring Security是基于Spring框架的,所有与Spring应用集成得更加紧密。它依赖于Spring容器,可以充分利用Spring的IoC和AOP等特性。而Shiro则独立于Spring,可以在任何Java应用中使用,无需依赖Spring容器。这也是我们经常使用Spring Security的原因!!!

  • 功能丰富性上:Spring Security在功能方面相对Shiro更加丰富。它提供了更多的安全特性和选项,比如更细粒度的权限控制、单点登录支持。Shiro虽然功能也很强大,但在某些方面还是不如Spring Security强大

  • 配置与使用上:Shiro的配置和使用相对简单,对于初学者来说更加友好。Spring Security因为功能丰富,所以上手稍微复杂一些,需要更多的学习和配置。

我们Java开发人员日常使用Spring框架比较多,需要更丰富的安全功能和更紧密的集成,所有通常情况下Spring Security是一个更好的选择。接下来我们学习一下Spring Security。

Spring Security的核心概念

Spring Security的核心概念包括:

  • 认证(Authentication):验证用户身份的过程,通常通过用户名和密码等凭据进行。

在这里插入图片描述

  • 授权(Authorization):确定已认证用户是否有权访问某个资源或执行某个操作的过程。
    在这里插入图片描述
虽然英文比较相似,但它俩不是“双胞胎”!!!
  • 角色(Role):用于表示用户权限的一种抽象概念,可以将多个权限组合成一个角色,方便管理和分配。
  • 安全上下文(Security Context):保存认证用户的信息和授权信息的地方,可以在整个应用中访问。
  • 过滤器链(Filter Chain):Spring Security使用过滤器链来处理安全相关的请求,每个过滤器负责处理特定的安全任务。

Spring Security简单使用

讲了这么多Spring Security的概念,我们现在来简单使用一下!

首先第一步,在项目的pom.xml文件中添加Spring Security的依赖:

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

然后创建一个配置类SecurityConfig

@Configuration
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.formLogin()             //自定义自己编写的登陆页面.loginPage("/login.html")    //登录页面设置.loginProcessingUrl("/login") //登录访问路径.permitAll()//登录页和登录访问路径无需登录也可以访问.and().authorizeRequests().antMatchers("/css/**","/images/**").permitAll().anyRequest().authenticated().and().csrf().disable();    //关闭csrf防护return http.build();}}

然后我们创建一个简单的控制器,用于测试认证和授权:

@RequestMapping("/hello")
public String hello(){//认证成功,得到认证成功之后用户信息Authentication authentication = SecurityContextHolder.getContext().getAuthentication();String userName = authentication.getName();return "hello  "+userName;
}

我们启动程序,输入URL:
在这里插入图片描述
密码输出在了控制台,我们通过控制台可以得到密码
在这里插入图片描述

这个时候访问URL时就可以看到下图的结果了:

在这里插入图片描述

文章到这里就结束了,后续会分享其他这方面的知识点,感谢大家的支持!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用vite创建vue项目

创建vue项目步骤 打开HBuilder X工具&#xff0c;创建空白项目 进入终端(鼠标点击文件进行选择&#xff0c;然后终端) 利用vite脚手架创建项目 &#xff08;前提要将HBuilder X工具属性设为管理员运行状态&#xff08;属性》兼容》管理员身份运行此程序&#xff09; npm …

【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置

往期回顾 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客 【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件-CSDN博客 【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控…

BEVFormer代码阅读

1. 代码地址 https://github.com/fundamentalvision/BEVFormer 2. 代码结构 个人理解&#xff0c;代码库中的代码与两篇论文都略有不同&#xff0c;总结起来&#xff0c;其结构如下。 3. BEVFormer 的 Pipeline 根据自己调试算法模型以及对论文的理解&#xff0c;我这里将 …

用html写一个雨的特效

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>雨特效</title><link rel"stylesheet" href"./style.css"> </head> <body> <div id"wrap-textu…

【御控物联】物联网平台设备接入-JSON数据格式转化(场景案例四)

文章目录 一、背景二、解决方案三、在线转换工具四、技术资料 一、背景 物联网平台是一种实现设备接入、设备监控、设备管理、数据存储、消息多源转发和数据分析等能力的一体化平台。南向支持连接海量异构&#xff08;协议多样&#xff09;设备&#xff0c;实现设备数据云端存…

02 SQL基础 -- 初识SQL

一、初识 SQL 1.1 概念介绍 数据库中存储的表结构类似于 excel 中的行和列,在数据库中,行称为记录,它相当于一条结论,列称为字段,它代表了表中存储的数据项目 行和列交汇的地方称为单元格,一个单元格只能输入一条记录 SQL是为操作数据库而开发的语言。国际标准化组织(…

第6章:6.4.2 案例二:爬取成语网站数据 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 本案例用到的网址为&#xff1a;成语大全列表成语大全列表https…

NumPy基础及取值操作

文章目录 第1关&#xff1a;ndarray对象第2关&#xff1a;形状操作第3关&#xff1a;基础操作第4关&#xff1a;随机数生成第5关&#xff1a;索引与切片 第1关&#xff1a;ndarray对象 编程要求 根据提示&#xff0c;在右侧编辑器Begin-End中填充代码&#xff0c;根据测试用例…

Servlet测试1

通过按钮提交get,post请求&#xff0c;并且后端响应数据&#xff0c;显示到前端 当点击get按钮时 是发起Get请求 后端接收到Get请求后&#xff0c;把数据写入到body内 当点击pst按钮时 是发起Post请求 后端接收到Post请求后&#xff0c;把数据写入到body内 之后前端就从bod…

Pyjion,一个神奇的 Python 库!

大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - Pyjion。 Github地址&#xff1a;https://github.com/Microsoft/Pyjion Pyjion 是一个针对 Python 解释器的 JIT 编译器&#xff0c;旨在提高 Python 代码的性能。本文将深入探讨 Pyjion 库的特性、用法&#xff0c;并…

ELK——日志处理界的瑞士军刀

目录 引言 一、ELK简介 &#xff08;一&#xff09;基本概述 1.Elasticsearch服务 2.Logstash服务 2.2 logstash关键组件 2.2 logstash数据流向 3.Kibana服务 &#xff08;二&#xff09;ELK工作流程 &#xff08;三&#xff09;ELK的应用价值 二、部署搭建ELK &…

第十五届蓝桥杯省赛C/C++大学B组真题及赛后总结

目录 个人总结 C/C 组真题 握手问题 小球反弹 好数 R 格式 宝石组合 数字接龙 爬山 拔河 ​编辑 再总结及后续规划 个人总结 第一次参加蓝桥杯&#xff0c;大二&#xff0c;以前都在在学技术&#xff0c;没有系统的学过算法。所以&#xff0c;还是花了挺多时间去备…