| | |
| | | */ |
| | | @Override |
| | | public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { |
| | | //开发环境不校验 |
| | | if (SpringContextUtil.checkDev()){ |
| | | return chain.filter(exchange); |
| | | }else { |
| | | String url = exchange.getRequest().getURI().getPath(); |
| | | //跳过不需要验证的路径 |
| | | List<String> skipAuthUrlList = Arrays.asList(skipAuthUrls); |
| | | Boolean status = false; |
| | | if (!CollectionUtils.isEmpty(skipAuthUrlList)) { |
| | | for (String skipAuthUrl : skipAuthUrlList) { |
| | | if (url.indexOf(skipAuthUrl) != -1) { |
| | | status = true; |
| | | break; |
| | | } |
| | | String url = exchange.getRequest().getURI().getPath(); |
| | | //跳过不需要验证的路径 |
| | | List<String> skipAuthUrlList = Arrays.asList(skipAuthUrls); |
| | | Boolean status = false; |
| | | if (!CollectionUtils.isEmpty(skipAuthUrlList)) { |
| | | for (String skipAuthUrl : skipAuthUrlList) { |
| | | if (url.indexOf(skipAuthUrl) != -1) { |
| | | status = true; |
| | | break; |
| | | } |
| | | } |
| | | if (status) { |
| | | return chain.filter(exchange); |
| | | } |
| | | if (status) { |
| | | return chain.filter(exchange); |
| | | } else { |
| | | 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 { |
| | | ReturnBO returnBO = new ReturnBO(); |
| | | //从请求头中取出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"); |
| | | 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包含的身份 |
| | | 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 = returnBO.toString().getBytes(StandardCharsets.UTF_8); |
| | | DataBuffer buffer = originalResponse.bufferFactory().wrap(response); |
| | | return originalResponse.writeWith(Flux.just(buffer)); |
| | | } else { |
| | | //将现在的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); |
| | | } |
| | | //将现在的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); |
| | | } |
| | | } |
| | | } |