当前位置: 首页 > news >正文

官方网站入口沧州网站建设专业定制

官方网站入口,沧州网站建设专业定制,公司简介模板免费下载电子版,ss网站代码关键字:AOP、JWT、自定义注解、责任链模式 一、Spring Security Spring Security 想必大家并不陌生,是 Spring 家族里的一个安全框架,特别完善,但学习成本比较大,不少开发者都觉得,这个框架“很重” 他的…

关键字:AOP、JWT、自定义注解、责任链模式

一、Spring Security

Spring Security 想必大家并不陌生,是 Spring 家族里的一个安全框架,特别完善,但学习成本比较大,不少开发者都觉得,这个框架“很重”

他的认证授权的过程时使用的 api 和组件比较复杂,但这不是主要的顾虑

并且,他是基于过滤器实现的,其过程抛出的异常并不会被全局异常处理器拦截,通过 SpringSecurity 认证授权的请求,才算进入我们的 Spring 环境下

但不得不说他确实有优点

  1. 对请求的一个 AOP 的统一处理(但是好像没有专门的后置处理器)
  2. 可以通过添加过滤器的方式增加认证过程,也对某些路由可添加授权过程
  3. 框架的一些注解,例如 @PreAuthorize,可以很方便的进行接口权限的设置

虽然它封装了很多现成的东西,但其实一些自己去写也没什么大不了的,还可以按照自己的想法去定制

我们可以学习它的优点去优化一下我们原本的认证授权架构

二、AOP + JWT

通过全局拦截器,拦截所有的请求,请求携带访问令牌 JWT,这里就不必多说了

三、自定义注解

自定义一个可以 Retention 为 Runtime,Target 为 TYPE 或 METHOD 的注解:

  1. 允许访问的角色
  2. 是否需要认证
  3. 是否需要授权

标注在 Controller 类才有用,若加在类上,则作用于所有方法,若标注在方法上,则以方法上的为准

意为此接口的拦截参数

/*** Created With Intellij IDEA* User: 马拉圈* Date: 2024-08-08* Time: 12:50* <br />* permit: 用户必须是列表中的角色才能访问 <br />* authenticate: 用户需不需要通过认证 <br />* authorize: 用户需不需要通过授权 <br />* 注意: <br />* permit 若为 {},则代表谁都不能访问,除非 authorize 为 false <br />* 1. 不需要认证、不需要授权 ✅ <br />* 2. 需要认证、需要授权 ✅ <br />* 3. 需要认证、不需要授权 ✅ <br />* 4. 不需要认证、需要授权 ❌(必然失败) <br />*/
@Documented
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Intercept {UserType[] permit() default {UserType.NORMAL_USER, UserType.MANAGER};boolean authenticate() default true; // 默认需要认证boolean authorize() default true; // 默认需要授权}
@Slf4j
public class InterceptHelper {public static Intercept getIntercept(Class<?> clazz) {// 类上的 Intercept 为初步结果return clazz.isAnnotationPresent(Intercept.class) ? clazz.getAnnotation(Intercept.class) : null;}public static Intercept getIntercept(Method targetMethod) {// 获取目标方法所在的类Class<?> declaringClass = targetMethod.getDeclaringClass();// 类上的 Intercept 为初步结果Intercept intercept = getIntercept(declaringClass);// 方法上的 Intercept 为最终结果return targetMethod.isAnnotationPresent(Intercept.class) ? targetMethod.getAnnotation(Intercept.class) : intercept;}}

四、责任链模式

责任链:

  1. 抽象处理者
  2. 具体处理者
  3. 客户端(我习惯是责任链的链头)

设计出以下架构:

  1. 前置初始化链
    1. 初始化日志变量、设置请求 id、请求 uri、请求方法,便于全链路追踪
    2. 根据配置文件对特定接口设置的拦截参数,判断当前请求的接口是否被设置了特殊的拦截参数
    3. 请求的接口如果存在目标方法,则判断其方法上或者类上是否存在 @Intercept 注解,若存在则初始化拦截参数

若不存在拦截参数,则代表该资源没有被开发者专门进行拦截的管理,直接返回错误:api 访问失败

  1. 前置认证链
    1. 是否忽略,若 authenticate 参数为 false,则直接忽略
    2. 若认证未成功且未获取 jwt,则尝试从 header 里获取 jwt
    3. 若认证未成功且未获取 jwt,则此时从 queryString 里获取 jwt
    4. 若认证未成功,则解析 jwt,若成功解析出用户信息,则存储到本地线程变量里(若令牌即将过期,则返回一个新的 jwt)

若未认证成功,则返回错误:认证失败

  1. 前置授权链
    1. 是否武略
    2. 是否强制拦截
    3. 若未授权成功,则获取当前用户的角色,判断是否存在于拦截参数的允许访问的角色列表,若存在则授权成功

若未授权成功,则返回错误:授权失败

  1. 后置链
    1. 清除日志变量、本地线程变量

在这里插入图片描述

在我们的架构中而一个责任链节点应该包含:

  1. 拦截的路由
  2. 执行的前置条件
  3. 执行的代码

具体代码参考:OKR-System4.0/src/main/java/cn/bitterfree/api/interceptor at main · CarefreeState/OKR-System4.0

http://www.yayakq.cn/news/78645/

相关文章:

  • 网站建设服务公司有哪些用c语言怎么做网站
  • 阿里云网站建设 部署与发布考试html源码大全
  • 怎么看一个网站好坏品牌营销策划机构
  • 婚纱网站页面设计图片vue适合什么样的网站开发
  • 合肥大型网站建设公司石家庄代理注册公司
  • 苏州做网站费用明细移动应用开发是学什么的
  • 佛山网站建设3lue3lue怎么做网站企业文化栏目
  • 重庆九龙坡区哪里有做网站的邯郸建设网站
  • wordpress搭建电影网站苏州工业园区两学一做网站
  • 网络推广网站推广五种常用的网站推广方法
  • 怎样自己做企业的网站台州seo公司
  • 深圳市住房和建设局官网站首页手机做任务网站有哪些内容
  • 甘肃临夏州建设局网站做特卖的网站爱库存
  • 株洲网站建设 公司三只松鼠网站推广策略
  • 做网络竞拍的网站苏州有做网站的公司吗
  • 云电脑注册网站首页北京做网站最好的公司
  • 苏州网页建站服务商做音乐网站赚钱吗
  • 网站开发的岗位职责沃尔玛跨境电商平台
  • 阳江 网站开发洛阳建站哪家好
  • 公司网站发布流程邢台建站
  • 打赏网站怎么建设女与男爱做电影网站免费
  • 礼品网站建设公司一个刚做好的网站怎么做seo
  • wordpress手机建站教程吉林市网站制作哪家好
  • 手机网站建设哪里好珠海公司制作网站
  • 网站开发用什么服务器sae wordpress 上传
  • 广州网站建设推荐q479185700顶上淘宝店铺推广方式有哪些
  • 著名的设计企业网站免费的网站模板有哪些
  • 服务好的南昌网站建设保定城乡建设局网站
  • 目前做那些网站能致富营销策略理论
  • 做随车吊网站要多大景观毕业设计作品网站