笔记来自
Spring Boot:整合Spring Security
security-oauth2是什么
- security是个框架
- oauth2是个协议,这个在最后面说
- 搜索相关资料还会看到sso单点登录
网上的资料很多,但是都看得一脸懵逼,正确操作是去github下一个能用的示例项目,运行起来才知道怎么使用
security有什么用
- 账号登陆
- 角色权限
- 第三方授权
对比
- security
- shiro,比security简单,功能也少些
使用
- maven,配置,代码真的很多,写不完,还是得看项目,项目已经提交了github【springcloud-pdt/module-order-9002】
- 这里讲一下整个流程
// 在配置被忽略的接口不需要登录也可以访问
// 请求来到 /login,进入SecurityUtils.login(),生成的token来自JwtTokenUtils工具类
// 这个工具类里可以看到密钥,有效时间等数据,生成出来的token才能被密钥再反向解密
// 这里就应该把username和token一起存进redis
// 在JwtAuthenticationFilter.getAuthenticationeFromToken()下面可以去判断redis是否存在,不存在就说明被二次登陆或者自行退出了
// 接口权限的注解是@PreAuthorize()
// 在PermissionService里自定义了权限注解@PreAuthorize("@ss.hasRole('permission')")
// 这个ss.hasRole自定义方法类就在PermissionService里,需要去查询数据库,判断用户有没有这个权限,最后返回true/false就行
// 如果是false,就会触发配置里的认证失败处理类,代码里一律返回:权限不足
oauth2
- 这是个服务于第三方的协议,有个企业要跟你合作,但是你不想公开自己的数据库数据,应该怎么做
- 做一个oAuth提供服务的网页,网页让企业去填一个属于他们的密钥A,然后你后台审核通过,会给他们一个密钥B
- 在他们的网站上有个用第三方登陆的按钮,点击按钮后会跳转到你的授权页面,并且后面后参数是redice等于过来时的页面地址,用于登陆成功后你再给他跳转回去,还有一个参数就是他们的密钥A
- 用户授权登陆,你需要判断账号密码正确,还有密钥A是不是真的,然后生成accessId,这个accessId是密钥A对应的密钥B和账号密码用户Id加密的,然后再跳转回redice参数的地址上,拼接上刚才生成的accessId
- 对方拿到accessId,会把accessId和密钥B作为参数请求你的接口,然后你判断成功返回用户的数据,比如头像等少量安全的数据
- 这就是oAuth的全过程,很简单,完全不需要什么封住好的框架就能实现
- 这些框架提供的就是一个安全的加密和解密过程,如果你真的需要的话
sso单点登录
- 这其实就是redis是要存一个username-token还是多个的问题,如果存一个,另一个登录就会替换掉上一个登录的token
- 你可以定时让前端去请求接口判断登陆状态
- 如果觉得这样服务器压力太大,也可以等用户下一次请求再返回重新登陆的响应
- 是不是简简单单,这是没必要去用什么框架的,一大堆配置,很复制,很头疼