当前位置:首页 >> 核电技术聚变聚能设备 >> 【RuoYi项目分析】网关的AuthFilter完成“认证”,注意是认证而不是权限,纽曼m520

【RuoYi项目分析】网关的AuthFilter完成“认证”,注意是认证而不是权限,纽曼m520

cpugpu芯片开发光刻机 核电技术聚变聚能设备 1
文件名:【RuoYi项目分析】网关的AuthFilter完成“认证”,注意是认证而不是权限,纽曼m520 【RuoYi项目分析】网关的AuthFilter完成“认证”,注意是认证而不是权限

文章目录 1. 功能介绍2. AuthFilter的配置3. AuthFilter实现分析4. 资料参考 过滤器的功能是检验经过网关的每一个请求,检查 token 中的信息是否有效。 注意是“认证检查”,而不是“权限”

1. 功能介绍

1、在用户完成登录后,程序会把用户相关的用户、角色、权限等信息临时存储在 redis 中,并把token返回给终端用户。

1、毕竟返回的token只存储了极其少量的用户信息,避免传输的数据量太大 2、RuoYi 返回的 token 中存储的信息有: user_key:login_tokens:uuid(存入redis中用的) user_id:userId username:userName

2、当用户携带token时,我们判断 token 是否有效,关联的用户是否登录。如果token有效就把user_key、user_id、username 设置到请求头中

此处主要是检验 token 是否有效。 设置到请求头,统一处理,也方便其他模块

2. AuthFilter的配置 @Componentpublic class AuthFilter implements GlobalFilter, Ordered{private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);@Autowiredprivate RedisService redisService;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){...}}

AuthFilter 实现了GlobalFilter, Ordered,是一个全局过滤器,所有的模块都有。这也很好理解,所有的模块当然都需要检查 token 是否有效啊。

3. AuthFilter实现分析 @Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){ServerHttpRequest request = exchange.getRequest();ServerHttpRequest.Builder mutate = request.mutate();String url = request.getURI().getPath();// 1、检验路径if (StringUtils.matches(url, ignoreWhite.getWhites())){return chain.filter(exchange);}String token = getToken(request);// 2、是否有tokenif (StringUtils.isEmpty(token)){return unauthorizedResponse(exchange, "令牌不能为空");}// 3、解析token,判断是否是有效的tokenClaims claims = JwtUtils.parseToken(token);if (claims == null){return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");}String userkey = JwtUtils.getUserKey(claims);// 4、判断用户是否登录boolean islogin = redisService.hasKey(getTokenKey(userkey));if (!islogin){return unauthorizedResponse(exchange, "登录状态已过期");}String userid = JwtUtils.getUserId(claims);String username = JwtUtils.getUserName(claims);// 5、检查token是否有userId、userNameif (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)){return unauthorizedResponse(exchange, "令牌验证失败");}// 6、设置用户信息到请求addHeader(mutate, SecurityConstants.USER_KEY, userkey);addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);// 7、内部请求来源参数清除removeHeader(mutate, SecurityConstants.FROM_SOURCE);return chain.filter(exchange.mutate().request(mutate.build()).build());}

1、检验路径 路径uri白名单检验,如果是白名单,直接通过。 2、是否有token 3、解析token,判断是否是有效的token 只有有效的 token 才会解析出信息而不报错。 4、判断用户是否登录 auth 的权限校验有一个校验用户是否登录的注解。 5、检查token是否有userId、userName 6、设置用户信息到请求头 7、内部请求来源参数清除 8、继续下一个过滤器

4. 资料参考

语雀笔记地址:https://www.yuque.com/yuchangyuan/tkb5br

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接