1.Spring security
一个能够为基于Spring的企业应用系统提供声明式的安全訪问控制解决方式的安全框架(简单说是对访问权限进行控制嘛),应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
springSecurity在我们进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问,从而实现安全。
如下为其主要过滤器
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
CorsFilter
LogoutFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
UsernamePasswordAuthenticationFilter(本文用来进行验证用户)
BasicAuthenticationFilter(本文中用来进行授权)
框架的核心组件
SecurityContextHolder:提供对SecurityContext的访问
SecurityContext,:持有Authentication对象和其他可能需要的信息
AuthenticationManager 其中可以包含多个AuthenticationProvider
ProviderManager对象为AuthenticationManager接口的实现类
AuthenticationProvider 主要用来进行认证操作的类 调用其中的authenticate()方法去进行认证操作
Authentication:Spring Security方式的认证主体
GrantedAuthority:对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示
UserDetails:构建Authentication对象必须的信息,可以自定义,可能需要访问DB得到
UserDetailsService:通过username构建UserDetails对象,通过loadUserByUsername根据userName获取UserDetail对象
我理解为 利用Filters 拦截请求 进行用户验证 和授权
原理图如下:
这里我们要实现UserDetailService 接口来进行用户登陆验证
具体参考博客连接:http://www.blogjava.net/youxia/archive/2008/12/07/244883.html
2.jwt
JWT(Json Web Token)是实现token技术的一种解决方案
JWT分为三个部分
分别为Header、Payload、Signature
3.实现
我的实现步骤基本如下
详细参照 :https://blog.csdn.net/ech13an/article/details/80779973 和我做的原理一样
后续会加上Redis