security-oauth2

笔记来自
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
  • 你可以定时让前端去请求接口判断登陆状态
  • 如果觉得这样服务器压力太大,也可以等用户下一次请求再返回重新登陆的响应
  • 是不是简简单单,这是没必要去用什么框架的,一大堆配置,很复制,很头疼
原文地址:https://www.cnblogs.com/pengdt/p/13523340.html