Spring Security 4 原理详解

看清spring security 认证流程,自定义认证方式 读懂spring security认证的具体实现,自定义认证方式可支持多种登录模式 阅读详情

场景:

  1. 用户通过提交username和password请求登陆
  2. 服务器验证身份信息是否正确
  3. 获取用户信息(包括角色集合)
  4. 利用3中的信息构建Security Context
  5. 在此之后,该用户的所有请求,Spring Security的访问控制机制将根据Security Context中的信息判断用户是否具有权限

以上,前3点即为认证,构建Security Context,为之后5的授权(访问控制)铺垫,SecurityContext中的用户信息也可供应用程序使用。

Spring Security的几个核心组件

1、SecurityContextHolder
用于存储的Security Context,主要是当前会话的Principal,默认是用ThreadLocal存储这些信息;
常用于获取当前用户的相关信息,Spring Security使用Authentication类来封装这些信息,获取当前会话用户的用户名代码如下所示:

 Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

    if (principal instanceof UserDetails) {
        String username = ((UserDetails)principal).getUsername();
    } else {
        String username = principal.toString();
    }

代码中的getContext()方法的返回值是一个SecurityContext的实例,就是在完成认证之后存储在ThreadLocal中的对象,主要封装了用户的相关信息。

2、UserDetailsPrincipalAuthentication
Spring Security中使用Authentication存储当前用户的主要信息。
Authentication中存储的是Principal,与UserDetails直接可以 强制转换。
UserDetails是Spring Security中的一个核心接口,作用是充当具体业务逻辑中的用户对象与Spring Security中所需要的Principal的适配器。
UserDetails的源码如下所示:

public abstract interface UserDetails extends Serializable {
   
   
        public abstract Collection<? extends GrantedAuthority> getAuthorities();

        public abstract String getPassword();

        public abstract String getUsername();

        public abstract boolean isAccountNonExpired();

        public abstract boolean isAccountNonLocked();

        public abstract boolean isCredentialsNonExpired();

        public abstract boolean isEnabled();
    }

由源码可知其主要是用户名、密码、权限列表等信息;因此,通常可以在项目定义个自己的用户对象并实现该接口,重写其getAuthorities()方法即可。目的是为了让项目中具体业务逻辑中的权限信息与Spring Security所需的权限配置对应上。举例部分代码,省略getter与setter方法:

    public class UserPo implements UserDetails{
   
   

        private String userNo;
        private String username;
        private String password;
        private List<RolePo> roles;

        @Override
        public Collection<? extends GrantedAuthority> getAuthorities() {
            List<GrantedAuthority> auths = new ArrayList<GrantedAuthority>();
            List<RolePo> roles = this.getRoles();
            for(RolePo rp : roles){
                auths.add(new SimpleGrantedAuthority(rp.getRoleName()));
            }
            return auths;
        }
    }

Spring Security提供一个UserDetailsService接口,该接口用于查询并返回一个UserDetails</

spring security详解 1.概要 Spring是非常流行和成功的Java应用开发框架,SpringSecurity正是Spring家族中的成员。SpringSecurity基于Spring框架,提供了一套Web应用安全性的完整解决方案。正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控制),一般来说,Web应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分,这两点也是SpringSecurity重要核心功能。 (1)用户认证指的是:验证某个用户是否为系统 阅读详情

相关推荐

原恒星尘埃生长的三维MHD模拟与湍流效应研究

星际尘埃演化是恒星形成过程中的关键环节,其动力学行为直接影响行星系统的构建。通过磁流体力学(MHD)模拟可以揭示尘埃颗粒从微米级到行星胚胎尺度的生长机制,其中湍流效应通过改变碰撞频率和密度结构发挥双重作用。最新研究采用COALA-RAMSES耦合框架,实现了包含自洽尘埃生长的三维非理想MHD模拟,量化了不同物理环境下尘埃尺寸分布的演化规律。这些发现不仅为解释ALMA观测数据提供理论依据,也对行星形成初期条件约束具有重要意义,特别是在湍流参数化与尘埃生长速率关系方面取得突破。

weixin_30988079的博客 358

SpringSecurity之基本原理图示讲解

文章目录前言一、SpringSecurity的功能二、基础构建模块与运行流程1. 图示与简介2.SpringSecurity框架下,HTTP如何访问web页面?总结 前言 不同于spring的其它框架 , SpringSecurity是一款重量级的 , 功能强大web安全框架,需要依赖的内容很多 ,极大地提高了Web开发中安全模块的开发效率 提示:以下是本篇文章正文内容,下面案例可供参考 一、SpringSecurity的功能 举几个例子吧,这在下面大部分都会用到 提供了除表单登录验证的身份验证以

qq_45596525的博客 1488

同花顺客户端数据采集:Hook注入与内存解密实战

在金融量化领域,客户端数据采集是获取低延迟、高精度行情的关键技术路径。其底层涉及进程通信、内存加密、反调试等典型Windows逆向工程问题。理解API Hook原理与AES-CBC动态密钥派生机制,有助于突破传统HTTP爬虫在国产金融软件中的失效困境。该技术不依赖网络劫持,而聚焦于本地进程内函数拦截与运行时内存解析,具备离线、可控、合规等工程优势,广泛应用于Level2行情、逐笔委托、分笔成交等高频数据场景,是量化基础设施中‘端侧数据主权’的重要实现方式。

weixin_30496999的博客 731

spring security 入门图解(概述)

说明:每个颜色代表spring security的一块儿。

1976

spring security学习- 图解过滤器

图解过滤器 图 11.1. auto-config='true'时的过滤器列表 11.1. HttpSessionContextIntegrationFilter 图 11.2. org.springframework.security.context.HttpSessionContextIntegrationFilte

u013269938的专栏 858

Spring Security 实战干货:UsernamePasswordAuthenticationFilter 源码分析

1. 前言欢迎阅读Spring Security 实战干货系列文章,在集成Spring Security安全框架的时候我们最先处理的可能就是根据我们项目的实际需要来定制注册登录了,尤其...

码农小胖哥 1886

springSecurity配置详解

SpringSide 3的官方文档中,说安全框架使用的是Spring Security 2.0。乍一看,吓了我一跳,以为Acegi这么快就被淘汰了呢。上搜索引擎一搜,发现原来Spring Security 2.0就是Acegi 2.0。悬着的心放下来了。虽然SpringSide 3中关于Acegi的配置文件看起来很不熟悉,但是读了Acegi 2.0的官方文档后,一切都释然了。 先来谈一谈A...

andyaqu的专栏 601

spring-security-44spring security 认证和授权原理

  在上一节我们讨论了spring security过滤器的创建和注册原理。请记住springSecurityFilterChain(类型为FilterChainProxy)是实际起作用的过滤器链,DelegatingFilterProxy起到代理作用。   但是这还没有解决我们最初的所有问题,那就是虽然创建了springSecurityFilterChain过滤器链,那么过滤器链中的过滤器是如...

weixin_30566149的博客 143

Spring Security4实战与原理分析视频教程

Spring Security4实战与原理分析视频教程 http://edu.51cto.com/course/8615.html Spring Security快速入门(基于XML) Spring Security快速入门(基于XML) URL匹配详解 自定义登陆 配置退出 A...

chiye9266的博客 179

spring-security-4 (3)spring security过滤器的创建与注册原理

  springsecurity是通过一个过滤器链来保护你的web应用安全。在springsecurity中,该过滤链的名称为springSecurityFilterChain,类型为FilterChainProxy。并通过DelegatingFilterProxy代理调用。对于这一点,这样说可能更好理解:springSecurityFilterChain是spring中的bean,而过滤器...

weixin_30600503的博客 206

Spring Security4企业权限管理视频教程(三套整合方案)

目录 ├─视频 │├─01、Spring Security4入门开发及认证原理分析(1-10).mp4 │├─02、Spring Security4入门开发及认证原理分析(1-10).mp4 │├─03、Spring Security4入门开发及认证原理分析(1-10).mp4 │├─04Spring Security4入门开发及认证原理分析(1-10).mp4 │...

weixin_46240962的博客 383

Spring Security4实战与原理分析视频课程( 扩展+自定义)

Spring Security4实战与原理分析视频课程( 扩展+自定义) Spring Security概述与课程概要介绍 Spring Security快速入门(基于XML) Spring Security快速入门(基于XML) URL匹配详解 自定义登陆 配置退出 Ajax登陆退出 JDBC认证 层级角色关系 认证体系介绍

java_web_hack1的专栏 4710

spring security原理及教程

spring security使用分类: 如何使用spring security,相信百度过的都知道,总共有四种用法,从简到深为:1、不用数据库,全部数据写在配置文件,这个也是官方文档里面的demo;2、使用数据库,根据spring security默认实现代码设计数据库,也就是说数据库已经固定了,这种方法不灵活,而且那个数据库设计得很简陋,实用性差;3、spring security和Ac

daniel7443的博客 1000

Spring Security入门(2-3)Spring Security 的运行原理 4 - 自定义登录方法和页面

参考链接,多谢作者: http://blog.csdn.net/lee353086/article/details/52586916     http元素下的form-login元素是用来定义表单登录信息的。 当我们什么属性都不指定的时候Spring Security会为我们生成一个默认的登录页面。 如果不想使用默认的登录页面,我们可以指定自己的登录页面。 一、form-login元素介绍  ...

weixin_34203832的博客 115

基于注解配置的spring mvc 4 + spring security 4实例与解析

关于spring security 4(以下简称SS) ,我们不能不否认,学习的成本是挺高的。如果光光是复制配置代码而不去理解SS的各个组件的实现原理和功能,那当然还是相当简单的一回事,因为配置的代码就那么几行PS:本人不是大神,写博客只是为了增强记忆和理解,以下的内容都是本人通过大量学习SS官方文档和搜索stack overflow探索得来的观点1.SS究竟主要实现什么功能?SS实现了非常多的功能

selfreeyuan的博客 4542

Spring Security 详解

Spring SecuritySpring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。​ 一般Web应用的需要进行认证和授权。​ 而认证和授权也是SpringSecurity作为安全框架的核心功能。视频地址:​ 我们先要搭建一个简单的SpringBoot工程① 设置父工

qq_22075913的博客 12万+

史上最简单的Spring Security教程(四十二):重点,也是终点,SpringSecurity工作流程图解

​不知不觉间,Spring Security系列从2020年6月16日于史上最简单的Spring Security教程(一):一分钟搭建SpringSecurity开始,历时5月有余。期间断断续续的一直在写,这一段太忙,没有太多的时间,所以就一直搁置了。不过,趁着琐碎的时间间隙,也思考了下这个系列的终结篇写什么内容。既然是终结篇,那就总结一下 Spring Security 框架的工作流程,算是为此系列暂时画上一个句号。 其实,Spring Security 框架最厉害、最核心的,就是过滤器链...

银河架构师的博客 2939

SpringSecurity 详解(通俗易懂)

2、退出,从SecurityContextHolder中拿到认证信息loginUser,进而得到userId。1.3、 如果找到,说明已经登录(将认证信息即用户信息 存入SecurityContextHolder)。1.1、第一次登陆时,根据userId生成jwt(能反解析出userId),返回给 浏览器并存储。1.2、用户下次再请求时,带上token, 登录校验过滤器会从token中解析出userId,通过userid查redis,查到(从redis中获取用户信息),查不到 认证失败(重新登录)

风也温柔☆的博客 3607

逆行定位1.21.1虚拟打卡模拟全球定位.zip

【软件介绍】:逆行定位:找地方神器!有了这款移动定位应用,你再也不用担心找不到目的地啦!随时随地定位,方便快捷!软件特色:【强大】功能强大,操作简单,完美操作感受,一键定位!【随时】无论身在何处,都能随时更改地点,方便快捷!【实际】内附实际地图,让你轻松确定目的地,再也不怕迷路啦!软件亮点:【场合】适用于各种场合,满足不同需求,方便快捷!【开启】开启时打卡,即使在其他位置,也能轻松签到!【情形】拍照处理,一键定位,让你随时随地记录美好瞬间!

下一篇: Activiti 工作流入门
AryaLee
博客等级 码龄11年 13粉丝 4原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值