聊一聊Spring Security的那些事

news2024/11/25 2:40:38

在这里插入图片描述

一.什么是Spring Security

S[ing Security是一个基于Java EE框架Spring的安全性框架,它提供了身份认证和授权功能,用于保护应用程序中的资源。同时,它也支持许多常见的身份验证机制,并提供了预防常见攻击,如跨站请求伪造(CSRF)和会话固定等。通过集成到Spring中,Spring Security可以轻松地与其他Spring技术一起使用,如Spring MVC、Spring Boot和Spring Data等。

Spring Security具有以下特点:

  1. 灵活性:Spring Security提供了多种认证和授权方式,可以根据应用程序的需求进行选择和配置。
  2. 安全性:Spring Security提供了多层安全防护,包括认证、授权、加密等,可以有效地保护Web应用程序的安全。
  3. 可扩展性:Spring Security提供了丰富的插件和扩展点,可以根据应用程序的需求进行自定义和扩展。
  4. 易用性:Spring Security提供了简单易用的API和文档,可以快速地实现安全功能。

总之,Spring Security是一个功能强大、灵活、安全、可扩展和易用的Web应用程序安全框架。由于其灵活、开放和可扩展性,Spring Security已成为Java企业级应用程序中最受欢迎的安全框架之一。

二. Spring Security可以具体做哪些事

Spring Security可以做如下安全性保障:

  1. 身份认证:提供多种认证方式(如基于表单、HTTP基本认证、OpenID、LDAP等),以确保用户是可信的并且已通过验证。
  2. 授权访问控制:定义访问规则和权限,对不同用户或角色给予不同程度的访问权限。例如,可以限制某些URL或页面仅允许特定用户或角色访问。
  3. 防止会话固定攻击(Session Fixation):避免黑客拦截来自合法用户的会话ID,并利用该ID发起攻击。
  4. 防止跨站点请求伪造(CSRF):在Web应用程序中添加额外的保护层来防止攻击者向受信任的网站发送伪装成合法请求的恶意请求。
  5. LDAP:集成LDAP服务来进行身份认证、用户管理和权限控制。
  6. 实现单点登录(SSO)功能:允许用户仅使用一组凭证即可访问多个应用程序。
  7. Spring Boot安全性启动器(Starter):简化配置和使用,使开发人员能够更快地构建安全的应用程序。

三.Spring Security与Shiro优缺点对比

Spring Security 和 Shiro 都是常用的安全框架,以下是它们的优缺点对比:

Spring Security 的优点:

  1. 大受欢迎:由于其在大量企业级项目中的广泛应用,因此相对来说更受欢迎。
  2. 更强大的功能:Spring Security支持OAuth2、OpenID Connect等现代安全性协议和标准,以及与LDAP等其他存储接口的深度整合。
  3. 完全集成:Spring Security是Spring框架的一部分,开发人员可以通过使用类似Java配置的方式轻松配置和扩展它。
  4. 易于使用:Spring Security提供了很多已经实现好的安全过滤器、过滤器链等,使得开发人员可以快速构建出具有高度保护能力的安全环境。

Spring Security 的缺点:

  1. 繁琐的配置:由于Spring Security拥有完善的安全认证、授权、防护等功能,所以需要进行繁琐的配置,并且会带来一些笨重的实现细节。
  2. 学习曲线较陡峭:由于Spring Security 比Shiro涵盖范围更广,因此学习曲线可能更陡峭。

Shiro 的优点:

  1. 更小巧灵活:Shiro集成容易、学习曲线较浅,且可以轻松地与Spring无缝集成。
  2. 活跃的社区:尽管Shiro目前的使用量相对于Spring Security较少,但它仍然有一个强大的开源社区,并持续地发展和改善中。
  3. 易于定制:Shiro的设计原则之一是可扩展性,因此开发人员可以通过自定义实现或拦截器来完全控制身份验证、授权等。

Shiro 的缺点:

  1. 功能不如 Spring Security 强大:Shiro虽然也具备认证、授权、防护等功能,但是由于使用范围相比较小,其本身提供的功能相对不够强大。
  2. 社区可能相对活跃度不足:尽管Shiro社区活跃,但相较于Spring Security还是会显得不足。

根据项目的需要和场景来选择哪种框架更加合适。如果你是一个 Spring 应用程序开发人员,Spring Security 是较好的选择;如果需要一个更灵活的安全框架并且不需要应付复杂业务需求,则 Shiro 较适合。

四. Spring Security的基本原理

image-20230605171104130

Spring Security 基本原理包括以下几个方面:

  1. 认证(Authentication):验证用户身份是否正确。Spring Security 提供了多种认证方式,例如用户名密码认证、基于 SSO 的认证、OAuth2 认证等。
  2. 授权(Authorization):控制用户对系统资源的访问权限。授权可以通过角色授权、基于 URL 路径的授权、表达式授权实现等,确保只有获得授权的用户才能访问系统受保护的资源。
  3. 过滤器链(Filter Chain):Spring Security 将一系列安全过滤器链接到 web 应用程序上下文中的每个请求中,来保证安全功能得以按需执行。安全过滤器是由 WebSecurityConfigurerAdapter 配置统一管理的。
  4. 用户详细信息(User Details):是 Spring Security 认证过程中必需的数据模型。包含关键信息,如用户名、密码、角色、权限等,可与内存、数据库等不同存储介质进行整合。
  5. 安全上下文(Security Context):Spring Security 采用线程本地存储(ThreadLocal)方法,将访问者的 Authentication 、 Authorization 等安全相关内容保存起来并一起交给安全管理器管理。无论何时,都可以通过 SecurityContextHolder 来获取当前访问者的安全上下文。

Spring Security 通过这些基本原理设计了一套高度可配置和易扩展的安全框架,可以灵活适应各种不同类型的应用程序。

五.SpringSecurity Web 权限方案

image-20230605171306321

此处,我们主要了解如何快速使用Spring Security这一套框架完成系统的登录鉴权功能,咋们先不说高大上的鉴权,就一步一步先慢慢来,先来做到登录成功,然后来设置权限!套用Spring Security这套安全框架,要想完成登录功能,主要有以下实现途径,稍微列举一下:

第一种:直接在配置文件中进行配置

第二种:拦截过滤器,进行配置

第三种:自定义编写实现类

1.设置登录系统的账号、密码

注:如果不进行设置,将会采用系统默认的用户名user,而且会随机生成密码,可用性不高!

image-20230605170635123

server:
    port: 9191
spring:
    security:
        user:
            name: poria
            password: poria

2.通过配置类进行配置

@Configuration
public class Secturityconfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        //原始密码
        String originPwd = "poria";
        //密码加密
        String Spassword = passwordEncoder.encode("poria");
        //密码校验
        auth.inMemoryAuthentication().withUser(originPwd).password(Spassword).roles("admin");
    }

    @Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

3.自定义实现类(重中之重)

@Configuration
public class Secturityconfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
    @Bean
    PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

@Service
public class UserInfoDetailService implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        List<GrantedAuthority> authorities= AuthorityUtils.commaSeparatedStringToAuthorityList("admin");
        return new User("poria",new BCryptPasswordEncoder().encode("poria"),authorities);
    }
}

此文待完。。。。。。

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

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

相关文章

[230603]托福听力精听|TPO66C2|Financial Advice

tuition bill 学费 add up 加总 allowance 补贴 budget 预算 document 文件 expense 费用&#xff1b;开销 semester 学期 dorm 宿舍 own 拥有&#xff1b;自己的 bulletin board…

SpringCloud微服务架构 --- 基础篇

一、认识微服务 1.1、服务架构演变 1.1.1、单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署。 单体架构的优缺点如下&#xff1a; 优点&#xff1a; 架构简单部署成本低 缺点&#xff1a; 耦合度高&#xff08;维护困难、…

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言&#xff1a;从本文开始&#xff0c;我们介绍下项目中设计的并行LVDS高速DAC接口设计&#xff0c;包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129&#xff0c;该芯片最大更新速率5.7Gsps&#xff0c;该芯片在宽带通信应用、LTE、雷达信号产…

wpf中使用svg图片

在wpf中&#xff0c;svg图片不能直接使用&#xff0c;但是我们知道&#xff0c;svg图片比png&#xff0c;jpg等图片都好点&#xff0c;原因就是它是矢量图片&#xff0c;不会变形。 一共4种方式&#xff1a; 第一种&#xff1a; 简单的svg&#xff0c;我们可以使用path来装载…

算法与数据结构(三)

一、堆 1&#xff0c;堆结构就是用数组实现的完全二叉树结构 根节点的左孩子的下标为&#xff1a;2i1,右孩子为2i2。两个孩子的父节点为(i-1)/2向下取整 2&#xff0c;完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 从下往上将孩子与父节点进行比较&#xff0c;如果子叶…

【Docker】什么是Docker,它用来干什么

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

使用Leangoo轻量敏捷看板工具实现多泳道任务管理

在敏捷开发的实践当中&#xff0c;通过可视化的敏捷任务看板来实现团队协同和透明化管理是必不可少的一个实践。 通过可视化的敏捷任务看板我们可以达到如下几个目的&#xff1a; 1. 可视化管理团队的目标; 2. 明确目标的优先级; 3. 明确目标分解后的任务项; 4. 可视化管理任…

【算法题解】34. 二叉树的最小深度

这是一道 简单 题 https://leetcode.cn/problems/minimum-depth-of-binary-tree/ 文章目录 题目简单递归解法Java 代码实现Go 代码实现复杂度分析 DFSJava 代码实现Go 代码实现复杂度分析 BFSJava 代码实现Go 代码实现复杂度分析 总结 题目 给定一个二叉树&#xff0c;找出其最…

第十一届蓝桥杯国赛JavaB组题解

A. 美丽的2 思路&#xff1a; 枚举 1 到 2020 的每个数&#xff0c;依次判断即可。 代码&#xff1a; public class Main {public static boolean check(int x) {while (x ! 0) {if (x % 10 2) return true;x / 10;}return false;}public static void main(String[] args) …

CPU和微程序

目录 一、CPU功能和结构 &#xff08;一&#xff09;CPU的功能 1. 指令控制 2. 操作控制 3. 时间控制 4. 数据加工 5. 中断处理 &#xff08;二&#xff09;CU和ALU的功能 1. CU&#xff08;控制器&#xff09;的功能 2. ALU&#xff08;运算器&#xff09;的功能 …

Greenplum高并发数据库概览

一、前言 GreenPlum DB&#xff08;GPDB&#xff09;是一个开源的高并发(MPP&#xff1a;massively parallel processing ) 数据处理平台&#xff0c;可用于海量数据分析&#xff0c;机器学习&#xff0c;AI场景&#xff0c;专为下一代数据仓库和大规模分析处理设计。 参考&am…

008-从零搭建微服务-系统服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

【ArcGIS Pro二次开发】(33):合并文件夹下的所有shp文件

在工作中&#xff0c;即使很不喜欢用shp文件&#xff0c;但还是经常会收到shp格式的文件。关于shp文件的吐糟就不多说了&#xff0c;除了文件小、字段名长度限制&#xff0c;不能储存弧线段等问题&#xff0c;还有一种处理方式也让人很是难受。 如上图&#xff0c;有些shp文件是…

挂起、激活单个流程实例

类&#xff1a;com.roy.ActivitiBusinessDemo/*** 挂起、激活单个流程实例*/Testpublic void suspendSingleProcessInstance(){ // 1、获取流程引擎ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine(); // 2、RuntimeServiceRuntimeService…

Flowable开始事件-空开始事件

文章目录 空开始事件一、开始事件的定义1、图形标记2、XML内容3、使用示例 总结 空开始事件 利用空开始事件发起流程 一、开始事件的定义 空开始事件意味着没有指定启动流程实例的触发条件。它是最常见的一种开始事件&#xff0c;一般需要人工启动或通过api启动 1、图形标记…

最系统的网络安全自学笔记+学习路线(超详细)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

职场工作的前提

职场工作 目录概述需求&#xff1a; 设计思路实现思路分析1.职场工作 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive.…

自动攻丝机(比例随动控制应用)

比例随动控制的详细介绍,可以参看下面的文章链接: 运动控制比例随动系统_RXXW_Dor的博客-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC高速计数器应用(附代码)_RXXW_Dor的博客-CSDN博客本文主要以三菱FX3U系列的高速计数为例来…

数据库期末复习(9.1)故障恢复到检查点之前

故障的分类 事务故障 系统故障 存储介质故障 只能通过故障来实现. 故障恢复 缓冲池策略 STEAL和FORCE策略:具体内容见课件。 为啥要使用steal和force两种策略 原因&#xff1a;如果不用steal策略 缓冲区就会有大量的脏页&#xff0c;如果使用not force策略 由于对同一个对…

R语言多线程提高计算速度,如何使用foreach包加速并行计算

R语言多线程加速 通常情况下&#xff0c;R语言只能使用一个线程来进行计算&#xff0c;因此计算的速度及其感人&#xff01; 最近刚好有一个需求&#xff1a;我有一个参考数据表&#xff0c;里面存放了30万条基因的名称和位置信息&#xff0c;现在我想从里面找到指定的6000个基…