SpringSecurity
73 篇文章
springsecurity
SpringSecurity—权限管理的投票器与表决机制
当用户想访问 Spring Security 中一个受保护的资源时,用户具备一些角色,该资源的访问也需要一些角色,在比对用户具备的角色和资源需要的角色时,就会用到投票器和表决机制。 当用户想要访问某一…
SpringSecurity—从子线程获取用户登录信息
Spring Security 中想要获取登录用户信息,不能在子线程中获取,只能在当前线程中获取,其中一个重要的原因就是 SecurityContextHolder 默认将用户信息保存在 Thread…
SpringSecurity—new 出来的对象一样也可以被 Spring 容器管理
按理说自己 new 出来的对象和容器是没有关系的,但是在 Spring Security 框架中也 new 了很多对象出来,一样也可以被容器管理,那么它是怎么做到的? 有些项目,就会发现里边的动态权限…
SpringSecurity—多种加密方案共存
1.PasswordEncoder 在 Spring Security 中,跟密码加密/校验相关的事情,都是由 PasswordEncoder 来主导的,PasswordEncoder 拥有众多的实现…
SpringBoot—三种跨域场景总结
我把 Spring Boot 中的跨域问题分为了三个场景: 普通跨域Spring Security 跨域OAuth2 跨域 分为三种并非多此一举,主要是因为这三种场景的配置都不太一样,而这三种场景又都…
SpringSecurity—用 Swagger 测试接口,在请求头中携带 Token
1.项目规划 搭建一个 OAuth2+JWT 的环境来做演示。一共搭建两个服务: 我稍微解释一下: auth-server 就是我的资源服务器,用来颁发 JWT 令牌。user-server 则是资源…
SpringSecurity—两种资源放行策略
Spring Security 中,到底该怎么样给资源额外放行? 1.两种思路 在 Spring Security 中,有一个资源,如果你希望用户不用登录就能访问,那么一般来说,你有两种配置策略: 第…
SpringSecurity—CSRF 防御源码解析
主要从两个方面来和大家讲解: 返回给前端的 _csrf 参数是如何生成的。前端传来的 _csrf 参数是如何校验的。 1.随机字符串生成 我们先来看一下 Spr…
SpringSecurity—防御 CSRF 攻击
CSRF 就是跨域请求伪造,英文全称是 Cross Site Request Forgery。 这是一种非常常见的 Web 攻击方式,其实是很好防御的,但是由于经常被很多开发者忽略,进而导致很多网站实…
SpringSecurity—防御会话固定攻击
之前聊了 Spring Security 中的 session 并发问题,如何像 QQ 一样,用户在一台设备上登录成功之后,就会自动踢掉另一台设备上的登录。 当然,Spring Security 中,…
SpringSecurity—自带防火墙
Spring Security 这么麻烦,不如自己写一个 Filter 拦截请求,简单实用。 自己写当然也可以实现,但是大部分情况下,大家都不是专业的 Web 安全工程师,所以考虑问题也不过就是认证和…
SpringSecurity—自动踢掉前一个登录用户
1.需求分析 在同一个系统中,我们可能只允许一个用户在一个终端上登录,一般来说这可能是出于安全方面的考虑,但是也有一些情况是出于业务上的考虑,松哥之前遇到的需求就是业务原因要求一个用户只能在一个设备上…
SpringSecurity—中如何快速查看登录用户 IP 地址等信息
1.Authentication Authentication 这个接口聊过多次,今天还要再来聊一聊。 Authentication 接口用来保存我们的登录用户信息,实际上,它是对主体(java.se…
SpringSecurity—自定义认证逻辑(高级)
之前我们自定义的一个核心思路就是自定义过滤器,在过滤器中做各种各样我们想做的事: 无论是添加登录验证码还是修改登录数据库格式,都需要对认证逻辑作出调整。 http://www.enmalvi.com/…
SpringSecurity—权限管理模型(RBAC)
1.RBAC 简介 RBAC(Role-based access control)是一种以角色为基础的访问控制(Role-based access control,RBAC),它是一种较新且广为使用的…
SpringSecurity—AuthenticationManagerBuilder (认证管理器分析)
SecurityBuilder 有它的一个重要实现 HttpSecurity,在 SecurityBuilder 的实现类里边,还有一个重要的分支,那就是 AuthenticationManagerB…
SpringSecurity—同时对接多个用户表(多数据源)
如果我们需要两个不同的 userdetailsservice 来实现不同平台查询不同的用户,怎么实现呢? 其实这个问题的核心点就是 ProviderManager 只要懂了这个, 其他的就很容易 。 …
SpringSecurity—AuthenticationManager(用户的全局和局部定义)
在 SpringSecurity 中有很多种定义用户的方式,尝试不同的用户定义可以有助于我们更好的理解SpringSecurity的源码部分! 基于 SpringSecurity 多个过滤器链来展示:…
SpringSecurity—OAuth 2-Spring Cloud 安全管理
微服务架构 在微服务中,我们一般都会有一个网关,网关背后有很多个微服务,所有的请求都是首先到达网关,再由网关转发到不同的服务上去。另外我们可能会搭建一个统一认证中心,我画一个已经过简化的架构图大家来看…
SpringSecurity—OAuth 2(十)OAuth2 结合 JWT
传统的 session 来记录用户认证信息的方式我们可以理解为这是一种有状态登录,而 JWT 则代表了一种无状态登录。无状态登录天然的具备单点登录能力,所以这个技术组合小伙伴们还是很有必要认真学习下。…
SpringSecurity—OAuth 2(九)第三方应用优化
依旧是基于授权码模式改造: http://www.enmalvi.com/2020/09/12/springsecurity-oauth-2-2/ 前面我们所写的第三方登录,我们在 Controlle…
SpringSecurity—OAuth 2(八)客户端信息入库
还是根据授权码进行改造: http://www.enmalvi.com/2020/09/12/springsecurity-oauth-2-2/ 客户端信息我们是直接存储在内存中的,像下面这样: //…
SpringSecurity—OAuth 2(七) 令牌存入 Redis
令牌往哪里存 在我们配置授权码模式的时候,有两个东西当时存在了内存中: InMemoryAuthorizationCodeServices 这个表授权码存在内存中。 InMemoryTokenStor…
SpringSecurity—OAuth 2(六)刷新Token
刷新Token,是四种授权模式共有的功能。 以授权码模式为例,当我们启动 auth-server 之后,在 IntelliJ IDEA 中,我们可以看到项目暴露出来的接口: http://www.en…
SpringSecurity—OAuth 2(五)客户端模式
客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中…
SpringSecurity—OAuth 2(四)密码模式
密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。 在这种模式中,用…
SpringSecurity—OAuth 2(三)简化模式
简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且…
SpringSecurity—OAuth 2(二)授权码模式
授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。 这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传…
SpringSecurity—OAuth 2(一)
OAuth OAuth 是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),而在这个过程中无需将用户名和密码提供给第三方应用。实现这一功能是通过提供…
Java—使用Jwt(Token令牌)
什么是JWT 提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的…