
SpringSecurity
文章平均质量分 95
Heartsuit
物联网平台架构师,优快云博客专家,阿里云专家博主,PMI认证项目管理专家(PMP),具备物联网、云原生、大数据等领域的研发经验。
展开
-
SpringSecurity:前后端分离项目中用户名与密码通过国密算法SM2加密传输
国密证书使用了自有的椭圆曲线,所以无法使用JDK自带的java.security解析证书,需要引入BouncyCastle的bcprov-jdk15on依赖。国密算法是我国自主研发创新的一套数据加密处理系列算法,包括SM1, SM2, SM3, SM4, SM7, SM9, 祖冲之密码算法等。这两个问题比较诡异,可能是后端解密问题:后端解密时,要在密文前面加上04(或者前端加密后在密文前直接加上04)。生成的私钥,这种格式是带换行符的,如果我配置到了。的秘钥对,需要注意的是,目前的。原创 2022-10-16 19:21:32 · 2120 阅读 · 1 评论 -
14-SpringSecurity:前后端分离项目中用户名与密码通过RSA加密传输
背景登录认证几乎是所有互联网应用的必备功能,传统的用户名-密码认证方式依然流行,如何避免用户名、密码这类敏感信息在认证过程中被嗅探、破解?这里将传统的用户名、密码明文传输方式改为采用 RSA 的非对称加密算法密文传输,即使认证请求被网络抓包,只要私钥安全,则认证流程中的用户信息相对安全;一般是生成RSA的密钥对之后,公钥存储在前端或后端(登录时每次请求后端返回公钥)进行加密,私钥存储在后端用于解密;曾在实际的应用中看到过动态生成密钥对的做法,即公钥-私钥都是动态生成,每次请求都不一样,这与固定公原创 2021-09-02 10:58:02 · 3202 阅读 · 0 评论 -
SpringBoot集成OAuth2.0的四种授权方式
背景OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。 OAuth2.0 是OAuth协议的延续版本,但不向后兼容 OAuth 1.0 ,即完全废止了 OAuth1.0 。很多大公司,国外的如Google,Netflix,Microsoft等,国内的像ByteDance,Alibaba,Tencent等都提供了OAuth认证服务(开放平台),这些都足以说明OAuth标准逐渐成为开放资源授权的标原创 2021-02-21 20:51:05 · 4213 阅读 · 0 评论 -
13-SpringSecurity:OpenID与Keycloak
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。目前 SpringSecurity 新版本除了实现对 OAuth2.0 的支持外,还支持 OpenID 及 SAML 。果然,Spring Security不仅是一个功能强大且可高度自定义的身份验证和访问控制框架,它还是保护基于Spring的应用程序的事实标准。SpringSecurity 本身提供了 GOOGLE GITHUB FACEBOOK OKTA 的 OAu原创 2021-01-27 22:57:15 · 1592 阅读 · 4 评论 -
12-SpringSecurity:通过OAuth2集成Github登录
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。目前 SpringSecurity 新版本已实现了对 OAuth2.0 的支持。 OAuth2.0 是一个开放的授权标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户凭据(用户名、密码)提供给第三方网站。SpringSecurity 本身提供了 GOOGLE GITHUB FACEBOOK OKTA 的 OAuth2.0 接入支持,具体源码在枚举类原创 2021-01-20 21:39:53 · 1991 阅读 · 2 评论 -
11-SpringSecurity:Session共享
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。分布式集群架构下的 Session 共享一般有以下几种实现方案:Session 复制集群中任一服务器上的 Session 发生变化(增删改),该节点会把这个 Session 的所有内容序列化,然后广播给所有其它节点,从而实现 Session 同步。Session 粘滞利用 Ngnix 负载均衡策略中的 ip_hash 机制,将某个 ip 的所有请求都定向到同一台服务原创 2021-01-14 19:14:11 · 873 阅读 · 0 评论 -
10-SpringSecurity:JWT及无状态服务
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。会话管理,是一个比较大的话题,大家熟知的Cookie-Session模式就忽略掉,今天重点介绍无状态会话:基于令牌的JWT(JSON Web Token),适用于微服务架构的会话管理方式;后续会涉及计到Session共享、OAuth2.0等关于分布式集群的会话管理。JWT简介关于JWT的介绍,网上资源有很多,可参考:https://jwt.io/introduction,简单来原创 2021-01-13 23:11:48 · 842 阅读 · 0 评论 -
9-SpringSecurity:登录时的图片验证码
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。实际项目中,为防止一般的恶意攻击,在认证时除了用户名、密码之外,我们还会要求用户输入验证码,今天我们就在 SpringSecurity 用户名-密码认证前,强行进行图形验证码的核验。Note:当前数字、文本、图片验证码均已不安全,人机交互、短信验证码相对安全。新建一个 SpringBoot 项目,起名 springboot-security-captcha ,核心依赖为 Web原创 2021-01-02 22:02:14 · 483 阅读 · 2 评论 -
8-SpringSecurity:RemeberMe及Base64编码
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。SpringSecurity提供了开箱即用的remember-me功能,就是长下面这样:直接在5-SpringSecurity:RBAC及方法授权的项目 springboot-security-rbac 中进行实验 ,核心依赖为 Web 与 SpringSecurity :<dependencies> <dependency>原创 2020-12-27 20:40:41 · 389 阅读 · 0 评论 -
7-SpringSecurity:获取已登录的用户信息
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。用户登录成功之后,我们便可以拿到用户的基本信息:用户名、权限等。有几种方法可以确定用户是谁。以下是一些最常见的方法:使用 SecurityContext 获取安全上下文将主体对象注入控制器方法将身份验证对象注入控制器方法使用 @AuthenticationPrincipal 注解的方法直接在上个实验的项目 springboot-security-db 中进行实原创 2020-12-26 21:26:36 · 2605 阅读 · 5 评论 -
6-SpringSecurity:数据库存储用户信息
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。之前涉及到的用户信息都是存在内存中的,显然,这种方法用于测试或演示还可以,实际中的应用场景肯定要求从数据库中读取的。新建一个 SpringBoot 项目,起名 springboot-security-db ,核心依赖为 Web , SpringSecurity , Thymeleaf 及 MyBatis :<dependencies> <depende原创 2020-12-24 22:36:31 · 1167 阅读 · 0 评论 -
5-SpringSecurity:RBAC及方法授权
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验 SpringSecurity 的各项Feature。RBAC是什么?Role Based Access Control,关于RBAC的介绍,网上资源很多,这里仅简单描述下。用户-权限:user, user-permission, permission用户-角色-权限:user, user-role, role, role-permission, permission新建一个 SpringBoot 项目,起名 spring-原创 2020-12-22 22:12:13 · 576 阅读 · 0 评论 -
4-SpringSecurity:CSRF防护
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验SpringSecurity的各项Feature。接着上一篇文章3-SpringSecurity:自定义Form表单中的项目:spring-security-form,继续演示开启CSRF防护的场景(当时关闭了CSRF:.csrf().disable())。依赖不变,核心依赖为Web与Thymeleaf:<dependencies> <dependency> <groupId&原创 2020-12-13 22:19:11 · 418 阅读 · 0 评论 -
3-SpringSecurity:自定义Form表单
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验SpringSecurity的各项Feature。新建一个SpringBoot项目,起名spring-security-form,核心依赖为Web与Thymeleaf。<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>原创 2020-12-11 22:11:10 · 815 阅读 · 0 评论 -
2-SpringSecurity:CSRF攻击
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验SpringSecurity的各项Feature。实验0:SpringSecurity默认开启CSRF防护现在我们在springboot-security项目的HelloController.java中新增一个POST接口:/ok。@RestControllerpublic class HelloController { @GetMapping("/hello") public String hello(){原创 2020-12-08 22:15:28 · 304 阅读 · 0 评论 -
1-初识SpringSecurity:user in-memory
背景本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验SpringSecurity的各项Feature。实验0:Hello SpringSecurity第一步,新建一个SpringBoot项目,起名:springboot-security,核心依赖为Web,此处先不引入SpringSecurity依赖。<dependencies> <dependency> <groupId>org.springframework.boot&原创 2020-12-06 22:11:26 · 522 阅读 · 0 评论