SpringSecurity安全框架

本文探讨了如何在Spring应用中避免和处理循环依赖问题,同时介绍了SecurityContext接口的作用及会话管理。还涵盖了Spring Security在用户认证、授权和过滤器配置中的实践,以及密码散列算法MD5的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇见的错误

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

解决办法:通过在配置文件中配置如下属性以恢复正常。

spring.main.allow-circular-references=true

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

SecurityContext接口:顾名思义,安全上下文。即存储认证授权的相关信息,实际上就是存储"当前用户"账号信息和相关权限。这个接口只有两个方法,Authentication对象的getter、setter

什么是会话?

用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于session方式、基于token方式等。

1.基于session的认证

它的交互流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话)中,发给客户端的sesssion_id存放到 cookie中,这样用户客户端请求时带上 session_id 就可以验证服务器端是否存在 session 数据,以此完成用户的合法校验,当用户退出系统或session过期销毁时,客户端的session_id 也就无效了。

2.基于Token的认证

它的交互流程是,用户认证成功后,服务端生成一个token发给客户端,客户端可以放到 cookie 或sessionStorage等存储中,每次请求时带上token,服务端收到token通过验证后即可确认用户身份

基于session的认证方式由servlet规范定制,服务端要存储session信息需要占用内存资源,客户端需要支持cookie;基于token的方式则一般不需要服务端存储token,并且不限制客户端的存储方式。如今移动互联网时代更多类型的客户端需要接入系统,系统多是采用前后端分离的架构进行实现,所以基于token的方式更适合。

3.为什么要授权

认证是为了保证用户身份的合法性
授权则是为了更细粒度的对隐私数据进行划分,授权是在认证通过后发生的,控制不同的用户能够访问不同的资源。

授权:授权是用户认证通过根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则正常访问,没有权限则拒绝访问。

Spring Security是一个能够为基于Spring的企业应用系统提供 声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Sprirg应用上下文中配置的Bean,
充分利用了Spring IOC,DI(控制反转Inversion of Control ,DI:Dependency Injection依赖主入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
用户认证和用户授权 SpringBoot+SpringSecurity
过滤器组成过滤链

UserDetailService接口

PasswordEncoder接口

注解

@Securied 类 配置类 启动类
@Securied(“ROLE_sale ”,"ROLE_lyf)
开启启动类元注解
@EableGlobMethodSecrity
@PreAuthorize()//方法执行前校验
@PostAuthorize()//方法之后校验
@hasAuthable
@Prefilter 传入方法数据进行过滤
@PostFilter 方法返回数据进行过滤

自动登陆

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值