From e33cc6968e5c7c57013413b077421b77714ed69b Mon Sep 17 00:00:00 2001 From: liyj <1003249715@qq.com> Date: Tue, 20 Aug 2024 14:48:17 +0800 Subject: [PATCH] 1、修改代码生成器 2、优化网关解析token信息 3、web端登录授权操作 4、web端修改密码操作 --- dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java | 97 +++++++++++++++++++----------------------------- 1 files changed, 39 insertions(+), 58 deletions(-) diff --git a/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java b/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java index f4829ee..d93e0cd 100644 --- a/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java +++ b/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java @@ -1,5 +1,6 @@ package cn.huge.gateway.filter; +import cn.huge.gateway.utils.ReturnBO; import cn.huge.gateway.utils.SpringContextUtil; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; @@ -46,16 +47,14 @@ @Value("${jwt.secret-key}") private String secretKey; + @Value("${jwt.iss-user}") + private String issUser; + @Value("${jwt.auth-skip-urls}") private String[] skipAuthUrls; @Value("${jwt.blacklist-key.format}") private String jwtBlacklistKeyFormat; - - /** - * jwt用户 - */ - private static String ISSUSER = "HUGEINFO"; @Override public int getOrder() { @@ -89,52 +88,36 @@ if (status) { return chain.filter(exchange); } else { - // todo 运营中心暂时写死token - if (url.indexOf("dyh-oper") != -1) { - String userId = "10001"; - ServerHttpRequest mutableReq = null; - exchange.getRequest().mutate().header("Authorization-userId", userId).build(); - ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build(); - return chain.filter(mutableExchange); + ReturnBO returnBO = new ReturnBO(); + //从请求头中取出token + String token = exchange.getRequest().getHeaders().getFirst("Authorization"); + //未携带token或token在黑名单内 + if (StringUtils.isEmpty(token) || isBlackToken(token)) { + ServerHttpResponse originalResponse = exchange.getResponse(); + originalResponse.setStatusCode(HttpStatus.OK); + originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); + returnBO.setCode(401); + returnBO.setMsg("您尚未登录,请登录后重试!"); + byte[] response = returnBO.toString().getBytes(StandardCharsets.UTF_8); + DataBuffer buffer = originalResponse.bufferFactory().wrap(response); + return originalResponse.writeWith(Flux.just(buffer)); } else { - //从请求头中取出token - String token = exchange.getRequest().getHeaders().getFirst("Authorization"); - //未携带token或token在黑名单内 - if (StringUtils.isEmpty(token) || isBlackToken(token)) { + //取出token包含的身份 + returnBO = verifyJWT(token); + if (returnBO.getCode() != 0) { ServerHttpResponse originalResponse = exchange.getResponse(); originalResponse.setStatusCode(HttpStatus.OK); originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); - byte[] response = "{\"code\": \"401\",\"msg\": \"用户未登录,请进行登录!\"}" - .getBytes(StandardCharsets.UTF_8); + byte[] response = returnBO.toString().getBytes(StandardCharsets.UTF_8); DataBuffer buffer = originalResponse.bufferFactory().wrap(response); return originalResponse.writeWith(Flux.just(buffer)); } else { - //取出token包含的身份 - Map<String, Object> result = verifyJWT(token); - int code = (int) result.get("code"); - if (code != 0) { - ServerHttpResponse originalResponse = exchange.getResponse(); - originalResponse.setStatusCode(HttpStatus.OK); - originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8"); - String responseResult = "{\"code\": \"" + code + "\", \"msg\": \"" + result.get("msg") + "\"}"; - byte[] response = responseResult.getBytes(StandardCharsets.UTF_8); - DataBuffer buffer = originalResponse.bufferFactory().wrap(response); - return originalResponse.writeWith(Flux.just(buffer)); - } else { - //将现在的request,添加当前身份 - String userId = (String) result.get("userId"); - ServerHttpRequest mutableReq = null; - String custId = (String) result.get("custId"); - if (StringUtils.isNotEmpty(custId)) { - URI uri = exchange.getRequest().getURI(); - URI newUri = assembleUri(uri, custId); - exchange.getRequest().mutate().uri(newUri).header("Authorization-userId", userId).header("Authorization-custId", custId).build(); - } else { - exchange.getRequest().mutate().header("Authorization-userId", userId).build(); - } - ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build(); - return chain.filter(mutableExchange); - } + //将现在的request,添加当前身份 + String userId = (String) returnBO.getData(); + ServerHttpRequest mutableReq = null; + exchange.getRequest().mutate().header("Authorization-userId", userId).build(); + ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build(); + return chain.filter(mutableExchange); } } } @@ -146,35 +129,33 @@ * @param token 授权信息 * @return Map */ - private Map<String, Object> verifyJWT(String token){ - Map<String, Object> result = new HashMap<>(); + private ReturnBO verifyJWT(String token){ + ReturnBO returnBO = new ReturnBO(); try { Algorithm algorithm = Algorithm.HMAC256(secretKey); JWTVerifier verifier = JWT.require(algorithm) - .withIssuer(ISSUSER) + .withIssuer(issUser) .build(); DecodedJWT jwt = verifier.verify(token); String userId = jwt.getClaim("userId").asString(); if (userId.isEmpty()){ - result.put("code", 401); - result.put("msg", "登录用户已失效,请重新登录"); + returnBO.setCode(401); + returnBO.setMsg("您尚未登录,请登录后重试!"); }else{ - result.put("code", 0); - result.put("userId", userId); - String custId = jwt.getClaim("custId").asString(); - result.put("custId", custId); + returnBO.setCode(0); + returnBO.setData(userId); } } catch (JWTVerificationException e){ log.error("AuthFilter方法[verifyJWT]调用异常:"+e, e); if (e.getMessage().indexOf("The Token has expired") != -1){ - result.put("code", 401); - result.put("msg", "登录用户已失效,请重新登录!"); + returnBO.setCode(401); + returnBO.setMsg("您尚未登录,请登录后重试!"); }else{ - result.put("code", 401); - result.put("msg", "登录用户已失效,请重新登录"); + returnBO.setCode(401); + returnBO.setMsg("您尚未登录,请登录后重试!"); } } - return result; + return returnBO; } /** -- Gitblit v1.8.0