springcloud如何獲取網(wǎng)關(guān)封裝的頭部信息
后臺系統(tǒng)如何獲取請求頭里的數(shù)據(jù)
1. 網(wǎng)關(guān)層封裝數(shù)據(jù)到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 是否需要鑒權(quán) 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, "請先登錄"); } // 驗(yàn)證 token JWT jwt = JWTUtil.parseToken(token); if (jwt == null) { log.info(StringUtils.join("[token=", token, "]轉(zhuǎn)換為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, "令牌未識別"); } // 過期時(shí)間 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) { // 登錄超時(shí) return FilterUtil.setParamToResponse(exchange, HttpStatus.UNAUTHORIZED, "登錄超時(shí)"); } 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層代碼實(shí)現(xiàn)
@ApiOperation(value = "添加") @PostMapping("") public PojoBaseResponse<Boolean> add(@RequestBody @Validated MainRouteDTO vo, @RequestHeader String userId) { return ResponseUtils.pojo(mainRouteService.add(vo, userId)); }
到此這篇關(guān)于springcloud獲取網(wǎng)關(guān)封裝的的文章就介紹到這了,更多相關(guān)springcloud網(wǎng)關(guān)頭部信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用eclipse導(dǎo)入javaWeb項(xiàng)目的圖文教程
這篇文章主要介紹了如何使用eclipse導(dǎo)入別人的javaWeb項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07解決RestTemplate加@Autowired注入不了的問題
這篇文章主要介紹了解決RestTemplate加@Autowired注入不了的問題,具有很好的參考價(jià)值,希望對大家有所幫助。2021-08-08Java語言通過三種方法實(shí)現(xiàn)隊(duì)列的示例代碼
這篇文章主要介紹了Java語言通過三種方法來實(shí)現(xiàn)隊(duì)列的實(shí)例代碼,數(shù)組模擬隊(duì)列,通過對定義的了解,發(fā)現(xiàn)隊(duì)列很像我們的數(shù)組,下面我們通過實(shí)踐給大家詳細(xì)介紹,需要的朋友可以參考下2022-02-02Spring Cloud Alibaba 之 Nacos教程詳解
Nacos是阿里的一個(gè)開源產(chǎn)品,它是針對微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)、配置管理、服務(wù)治理的綜合性解決方案。這篇文章主要介紹了Spring Cloud Alibaba 之 Nacos的相關(guān)知識,需要的朋友可以參考下2020-11-11Springboot基礎(chǔ)之RedisUtils工具類
本文來說下RedisUtils工具類,主要介紹了整合Redis、MyBatis,封裝RedisUtils工具類等知識,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05springBoot項(xiàng)目啟動類啟動無法訪問的解決方法
這篇文章主要介紹了springBoot項(xiàng)目啟動類啟動無法訪問的解決方法,需要的朋友可以參考下2018-10-10