0.简介
Spring Sercuity是spring家族中的一个安全管理框架。一般的web应用需要进行认证和授权。
SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核心功能包括:
认证 (用户登录)
授权 (此用户能够做哪些事情)
攻击防护 (防止伪造身份攻击)
1.认证
其实就是所谓的登录校验,核心依赖的就是token,可以理解为加密之后的字符串。通过用户是否携带这个token来判断是否是系统的用户;另一方面,也可以通过token获取加密之前的数据,来判断是哪一个用户。
什么是JWT?
JWT(json web token),它并不是一个具体的技术实现,而更像是一种标准。
JWT规定了数据传输的结构,一串完整的JWT由三段落组成,每个段落用英文句号连接(.)连接,他们分别是:Header、Payload、Signature,所以,常规的JWT内容格式是这样的:AAA.BBB.CCC
基本上绝大部分的人都用JWT做登录授权,它相比原先的session、cookie来说,更快更安全,跨域也不再是问题,更关键的是更加优雅。JWT大概是和 .Net Core 一起进入我视野的,它相对轻便、优雅,对服务器基本没依赖,所以我基本所有项目的登录授权都在用它。用它这么久了还没仔细梳理下,所以今天抽时间写一篇。没有翻查什么文献,也没有很高大上的词缀,就是单纯以我的角度阐述我对它的认识。
总的来说,就是登陆的时候把token响应给前端,以后这个用户的所有请求请求头里都会携带token,从而进行相应的校验。
2.原理初探
学习步骤:直接验证 --->使用数据库验证
Spring Security对很多功能都有了默认的实现,所以要想灵活的使用Spring Security,必须对它默认的认证和授权的流程有清晰的印象。
Spring Security的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。
如入门的过滤器:
根据原理如何改成根据数据库来认证?
很简单,把UserDetailsService的实现类进行替换即可。在自己定义的实现类里,根据用户名去数据库中查询用户信息即可,其他也做与入门相同的事情。然后,如果验证通过了,会返回一个token,这时候入门案例的UserPasswordAuthenticationFilter就会出现问题,我可以选择自己定义一个登录接口,定义一个Controller,Controller调用service。总结一下,就是修改俩个实现类。