springcloud如何获取网关封装的头部信息
更新时间:2022年06月17日 10:35:32 作者:一一可可
这篇文章主要介绍了springcloud获取网关封装的头部信息,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
后台系统如何获取请求头里的数据
1. 网关层封装数据到head头
@Component @Slf4j public class LoginGatewayFilterFactory extends AbstractGatewayFilterFactory { @Override public GatewayFilter apply(Object config) { return (exchange, chain) -> { // 获取 request ServerHttpRequest req = exchange.getRequest(); URI uri = req.getURI(); // 日志 log.info(StringUtils.join("【", req.getMethod(), "】", uri.getHost(), ":", uri.getPort(), ", 【path】", uri.getPath())); // 检查请求 uri 是否需要鉴权 String path = uri.getPath(); if (StringUtils.equalsAny(path, "/sysLogin")) { return chain.filter(exchange); } // 获取请求的 token HttpHeaders reqHeaders = req.getHeaders(); String token = req.getHeaders().getFirst("token"); if (StringUtils.isBlank(token)) { return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "请先登录"); } // 验证 token JWT jwt = JWTUtil.parseToken(token); if (jwt == null) { log.info(StringUtils.join("[token=", token, "]转换为jwt失败")); return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未识别"); } JSONObject json = jwt.getPayloads(); if (json == null || json.isEmpty() || json.isNull("key") || json.isNull(JWTPayload.ISSUED_AT)) { log.info(StringUtils.join("[token=", token, "]解析异常")); return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未识别"); } String userId = json.get("key", String.class); if (StringUtils.isBlank(userId)) { return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未识别"); } boolean verify = jwt.setKey(JwtUtils.createKey(userId)).verify(); if (!verify) { return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未识别"); } // 过期时间 long seconds = Instant.now().getEpochSecond() - json.get(JWTPayload.ISSUED_AT, Long.class); if (seconds < 0) { return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "令牌未识别"); } else if (seconds >= 1500 && seconds <= 1800) { // 自动刷新令牌 ServerHttpResponse httpResponse = exchange.getResponse(); HttpHeaders repHeaders = httpResponse.getHeaders(); repHeaders.set("token", JwtUtils.createToken(userId)); } else if (seconds > 1800) { // 登录超时 return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "登录超时"); } Consumer<HttpHeaders> headersConsumer = httpHeaders -> { for (Map.Entry<String, List<String>> entry : reqHeaders.entrySet()) { httpHeaders.put(entry.getKey(), entry.getValue()); } httpHeaders.add("userId", userId); }; return chain.filter(exchange.mutate().request(req.mutate().headers(headersConsumer).build()).build()); }; } }
2. controller层代码实现
@ApiOperation(value = "添加") @PostMapping("") public PojoBaseResponse<Boolean> add(@RequestBody @Validated MainRouteDTO vo, @RequestHeader String userId) { return ResponseUtils.pojo(mainRouteService.add(vo, userId)); }
到此这篇关于springcloud获取网关封装的的文章就介绍到这了,更多相关springcloud网关头部信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解读@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstr
这篇文章主要介绍了解读@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstructor的区别及在springboot常用地方,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12解决idea2020.2遇到pom.xml文件报错maven插件tomcat7的问题
这篇文章主要介绍了idea2020.2遇到pom.xml文件报错maven插件tomcat7的问题,本文给大家分享解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-09-09springboot整合mybatis实现简单的一对多级联查询功能
这篇文章主要介绍了springboot整合mybatis实现简单的一对多级联查询功能,分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-08-08Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法
这篇文章给大家介绍了spring-boot中如何定义过滤器、监听器和拦截器,对Spring Boot 编写Servlet、Filter、Listener、Interceptor的相关知识感兴趣的朋友一起看看吧2017-07-07
最新评论