Spring Security内部工作原理

news2025/7/30 9:53:15

定义

Spring 安全性是 Spring提供的一个框架,有助于自定义访问和身份验证过程。它在保护应用程序方面起着非常关键的作用。

Spring 安全性,主要侧重于身份验证和授权,为 Java 应用程序提供所有好处。它非常有用,并提供了一种在实际项目中应用的简单方法。并且,允许在实际项目中进行自定义修改。

优点/特点

  • 全面而广泛地支持身份验证和授权过程。
  • 防止跨站点伪造、会话固定、点击劫持等。
  • 集成 Servlet API。
  • 可以选择提供与Spring Web MVC的集成。

工作流:如何验证和管理用户的凭据

此工作流表示用户凭据一旦由用户提供的工作周期。它显示了如何验证用户的凭据并在 Spring 安全性中围绕。

图:Spring 安全性中用户凭据的旅程

身份验证筛选器

身份验证筛选器是拦截请求的筛选器。一旦它拦截了这些请求,它就会尝试转换身份验证详细信息。因此,我们将从用户那里接收详细信息(如用户名和密码)到身份验证对象中。

认证对象:它是负责验证用户凭据的基本对象。

认证管理器:

身份验证管理器是它将识别请求必须转到的相应身份验证提供程序的地方。而且,用户不会遵循许多过程来验证凭据,因为他/她可以使用数据库来验证用户凭据。或者他/她可以使用LDAP,或者他/她可以使用系统可能具有身份验证管理器的可能提供程序。

它负责确定最合适的身份验证提供程序,并在身份验证提供程序收到请求后发送用户的请求。

身份验证提供程序

身份验证提供程序在其中实现安全验证的所有逻辑。Spring 安全性提供了一些功能来自定义请求(根据选择对端点进行身份验证):

  • Pr为端点提供自定义身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests((requests) -> {
        ((AuthorizedUrl)requests.antMatchers("/endpoint1")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint2")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint3")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint4")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint5")).permitAll();
        ((AuthorizedUrl)requests.antMatchers("/endpoint6")).permitAll();
    });
    http.formLogin();
    http.httpBasic();
}
  • Pr对所有端点进行身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests((requests) -> {
        ((AuthorizedUrl)requests.antMatchers("/endpoint1")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint2")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint3")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint4")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint5")).permitAll();
        ((AuthorizedUrl)requests.antMatchers("/endpoint6")).permitAll();
    });
    http.formLogin();
    http.httpBasic();

    http.authorizeRequests((requests) -> {
        ((AuthorizedUrl)requests.anyRequest()).authenticated();

    });
    http.formLogin();
    http.httpBasic();
}
  • 取消对所有端点进行身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests((requests) -> {
        ((AuthorizedUrl)requests.antMatchers("/endpoint1")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint2")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint3")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint4")).authenticated();
        ((AuthorizedUrl)requests.antMatchers("/endpoint5")).permitAll();
        ((AuthorizedUrl)requests.antMatchers("/endpoint6")).permitAll();
    });
    http.formLogin();
    http.httpBasic();

    http.authorizeRequests((requests) -> {
        ((AuthorizedUrl)requests.anyRequest()).permitAll();

    });
    http.formLogin();
    http.httpBasic();
}

它在内部使用两个接口:

用户详细信息服务(接口):这是一个保存用户架构的接口,并显示用户详细信息的外观,如用户名、密码、MFA 等。

密码编码器(接口):这是一个接口,有助于在评估安全性时加密、编码和解密用户的密码。并且,无论提供的输入(身份验证对象)是否有效,流都会返回到身份验证管理器

身份验证对象从身份验证筛选器内部发送,无论用户是否是有效的经过身份验证的用户,以及与之关联的角色和权限是什么。

在身份验证内部,身份验证筛选器提供的对象从身份验证提供程序和身份验证管理器填充。

之后,身份验证筛选器身份验证对象传递给安全性,以保存将存储在容器中的用户详细信息。

最后,生成令牌,应用程序将保存令牌,该令牌将存储在安全上下文接口中。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("admin").password("admin").authorities("admin")
            .and()
            .withUser("user").password("user").authorities("read")
            .and()
            .passwordEncoder(NoOpPasswordEncoder.getInstance());
}

安全上下文

安全上下文是一个用户可以在对自己进行身份验证后查看他/她的数据的地方,并确定他/她是否是有效用户。用户的这些信息将自动存储在安全上下文中并响应浏览器。

第二次,尝试传递相同的安全信息和相同的流将不会进一步执行,因为用户的凭据已经过验证。

工作流:让我们了解 Spring 安全性中用户的管理周期

此工作流表示用户的管理周期。它显示了用户名,密码,角色,权限等用户信息如何在Spring Security中存储和管理。

准备好通过面向未来的新兴技术获得竞争优势了吗?

让我们建立合作伙伴关系

图:如何在 Spring 安全性中彻底管理用户

用户详细信息(界面)

用户详细信息界面是帮助识别用户的用户名、密码、角色和权限的界面。它还负责检查用户帐户的有效性/到期日。它是一个合约或模式或蓝图,由 spring 安全框架维护。并且还表示尝试访问我们应用程序的实际用户。

如果用户很好用 spring 框架本身提供的默认实现,可以继续使用 User(类),它实现了这个用户详细信息接口,以及如何实现这些抽象方法的所有实现。

用户详细信息管理器(界面)

User Details Manager 扩展了UserDetailsService(实现类),这意味着此接口中也将存在单个抽象方法。因此,那些想要实现此用户详细信息管理器的人必须为所有这些方法提供具体的实现。

结果,创建一个用户,正如您所期望的那样,此方法的参数是用户详细信息。

内存中用户详细信息管理器(类)

内存用户详细信息管理器是一个实现类,它有助于维护所有用户,这些用户可以从内存本身加载用户详细信息、身份验证详细信息、权限以及所有内容,内存本身将存储和设置Spring上下文。

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

        InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager();

        UserDetails userOne = User.withUsername("admin").password("admin").authorities("admin").build();
        UserDetails userTwo = User.withUsername("user").password("user").authorities("read").build();

        userDetailsService.createUser(userOne);
        userDetailsService.createUser(userTwo);
        auth.userDetailsService(userDetailsService);
}

JDBC 用户详细信息管理器(类)

JDBC 用户详细信息管理器是 Spring Security 提供的最著名的实现。这是生产级就绪的实现,这意味着如果您提供MySQL,Oracle或任何数据库的数据源详细信息,则此JDBC用户详细信息管理器具有与加载用户详细信息,维护它们,更改密码相关的所有代码。

LDAP 用户详细信息管理器(类)

LDAP 用户详细信息管理器是利用 LDAP 服务器进行授权和身份验证的实现类。

用户是 Spring 安全性提供的默认实现,它发生在用户详细信息接口架构中。

参考

有关安全安全的详细信息,请单击此处。

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

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

相关文章

抑制细胞代谢紊乱的抑制剂

作者团队发现,缺乏 CD4 T 细胞能保护小鼠免受应激诱导的焦虑样行为,物理应激诱导的白三烯 B4 (LTB4) 触发 CD4 T 细胞中的严重线粒体裂变,进而导致各种行为异常,包括焦虑,抑郁和社交障碍。代谢组和单细胞转录组学显示…

Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、跟踪滑动轨迹实现手写签名 手写签名的原理是把手机屏幕当作画板,把用户手指当作画笔,手指在屏幕上划来划去,屏幕就会显示手指的移动轨迹,就像画笔在画板上写字一样&#…

安装free IPA与CDH6.3.2结合

主机名之类的应该在cdh安装的时候就配好了 不再赘述 安装freeipa yum -y install nscd 修改 enable-cache netgroup no enable-cache group no enable-cache passwd no 云主机默认不开启IPv6,根据提…

小 A 的卡牌游戏(Gym - 103186B)

题 小A最近沉迷于-款名为Hearthverse的卡牌游戏。在这款游戏中,卡被分为了三个种类(随从、法术和魔法阵),在组卡时,这款游戏严格规定了卡组中每种卡牌的数量,具体来说,-副n张卡的卡组需要包含恰好a张随从卡&#xff0…

Tdengine技术实践

1. 什么是时序数据库? 时序数据库全称为时间序列数据库。 即时间序列数据,按时间维度顺序记录且索引的数据。 时间序列数据主要由 电力行业、化工行业、气象行业、地理信息 等各类型实时监测、检查与分析设备所采集、产生的数据,这些工业数…

配置Maven环境

Maven官网 Maven所有发行版本 一、windows配置maven环境 想要使用maven就必须要有JDK JDK安装 百度网盘下载(二进制文件,一直点下去) 链接:https://pan.baidu.com/s/1y1AutzJeQGdNHa2ml_bk8w 提取码:scyc验证JDK是…

【Java八股文总结】之Java基础

写在前面: 整份Java八股文的整理贯穿我的整个秋招,希望可以给大家带来帮助,如果对你有一定的作用,欢迎大家转发点赞,谢谢!在复习Java八股文的过程中,有两位老哥的博文对我帮助比较大&#xff0c…

力扣(LeetCode)10. 正则表达式匹配(C++)

动态规划 基于闫式dp分析法。 综上 , f[i][j]{f[i−1][j−1]&&(s[i]p[j]∣∣′.′p[j])if p[j]≠∗f[i][j−2]∣∣(f[i−1][j]&&(s[i]p[j−1]∣∣′.′p[j−1])if p[j]∗f[i][j] \begin {cases} f[i-1][j-1] ~~\&\& ~~(s[i]p[j] ~||~ .p[j])&…

鲁棒局部均值分解 (RLMD)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

安卓手机丢了,危险了!意外的7万美元的谷歌Pixel绕过锁屏

我发现了一个影响似乎所有谷歌Pixel手机的漏洞,如果你把任何锁定的Pixel设备给我,我可以把它解锁还给你。这个漏洞刚刚在2022年11月5日的安全更新中得到修复。 该问题允许有物理权限的攻击者绕过锁屏保护(指纹、PIN等)&#xff0c…

英国博士后招聘|林肯大学—植物-土壤相互作用

英国林肯大学博士后职位—植物 -土壤相互作用 林肯大学(University of Lincoln),简称“UoL”,是英国一所公立综合性研究型大学,创办于1861年,后与多所大学合并更名为林肯大学。 《独立报》曾评价林肯大学为…

Mysql之性能优化分析

一、避免死锁 1.1、导致mysql死锁的要素 1、两个或者两个以上事务。 2、锁资源只能被同一个事务持有或者多个事务竞争的锁是不兼容的,比如排他锁和共享锁、排他锁和排他锁。 3、每个事务都已经持有锁并且申请新的锁。 4、事务之间因为持有锁和申请锁导致彼此循环等…

Cesium 简介

Cesium 简介 一、Cesium 是什么? Cesium 是一个开源 JavaScript 库,用于 3D , 2D , 2.5D 地图可视化。 Cesium 由 AGI 公司计算机图形开发小组与 2011 年研发的。 Cesium 一词来源于化学元素铯,铯是制造原子钟的关键元素,研发小组…

Vue框架实现对前端数据表的增删改查(第六课)

前端对数据的增删改查你看到过吗?今天带你来实现一下在前端就页面上实现对数据的增伤改查 第一部分功能演示 先看下页面效果 增加一条数据 删除一条数据 修改一条数据 查询指定的一条记录 第二部分 上面的功能该如何实现的呢!首先又是页面改如何展示…

吃豆人游戏-第12届蓝桥杯Scratch选拔赛真题精选

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第79讲。 蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选…

基于PHP+MySQL的在线投票系统设计与实现

随着时代的发展,人们需要获取更多的信息和用户的意见,这时候就会产生一个投票。转托管模式都是人工发传单,然后填写来进行。但是随着互联网的发展,这种模式已经逐渐被淘汰,人们越来越希望通过更加方便快捷的方式来进行在线投票。这就是在线投票系统,这是我们设计本系统一个初衷…

传奇GOM/GEE微端配置外网架设教程

传奇GOM/GEE微端配置外网架设教程 我是艾西,经常听到一些小伙伴说微端需要购买?其实大家理解错了,传奇微端自己就可以搭建的是不需要购买的,如果是说单独架设到另外一台服务器上那么这才是需要收费的俗称微端服务器。主要用于跑带…

Nginx+keeplived高可用

目录 一、环境准备 1、准备3台centos服务器 2、安装软件 二、keepalived配置 三、nginx进程监视脚本 一、环境准备 1、准备3台centos服务器 服务器名主机名IPVIPNginx代理服务器proxy1192.168.1.10192.168.1.100Nginx代理服务器proxy2192.168.1.20web网站服务器web1192.…

TikTok 的 TAP好货分销服务商招募啦,最新入驻政策速来了解

众所周知,以抖音快手平台为主的内容电商对于国内来说已经司空见惯,内卷到极致,但是对于国外来说还是一个比较新奇的领域。 而海外版抖音 TikTok就成功实现了内容电商的出海,将电商直播带出国门,面向全世界。为了完善T…

【16-配置中心之Nacos的基本使用Nacos服务之命令空间、Nacos服务之配置组、Nacos服务之配置拆分】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…