做商城网站可以个人备案,河南省建设厅网站打不开,最近国内新闻大事20条,网站怎么做地区屏蔽js文章目录 1. 功能介绍2. AuthFilter的配置3. AuthFilter实现分析4. 资料参考 过滤器的功能是检验经过网关的每一个请求#xff0c;检查 token 中的信息是否有效。 注意是“认证检查”#xff0c;而不是“权限” 1. 功能介绍
1、在用户完成登录后#xff0c;程序会把用户相关… 文章目录 1. 功能介绍2. AuthFilter的配置3. AuthFilter实现分析4. 资料参考 过滤器的功能是检验经过网关的每一个请求检查 token 中的信息是否有效。 注意是“认证检查”而不是“权限” 1. 功能介绍
1、在用户完成登录后程序会把用户相关的用户、角色、权限等信息临时存储在 redis 中并把token返回给终端用户。 1、毕竟返回的token只存储了极其少量的用户信息避免传输的数据量太大 2、RuoYi 返回的 token 中存储的信息有 user_keylogin_tokens:uuid存入redis中用的 user_iduserId usernameuserName 2、当用户携带token时我们判断 token 是否有效关联的用户是否登录。如果token有效就把user_key、user_id、username 设置到请求头中 此处主要是检验 token 是否有效。 设置到请求头统一处理也方便其他模块 2. AuthFilter的配置
Component
public class AuthFilter implements GlobalFilter, Ordered
{private static final Logger log LoggerFactory.getLogger(AuthFilter.class);Autowiredprivate RedisService redisService;Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain){...}
}AuthFilter 实现了GlobalFilter, Ordered是一个全局过滤器所有的模块都有。这也很好理解所有的模块当然都需要检查 token 是否有效啊。
3. AuthFilter实现分析 Overridepublic MonoVoid 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