当前位置: 首页 > news >正文

怎么做外贸网站seo北京seo公司工作

怎么做外贸网站seo,北京seo公司工作,什么网站会更有浏览量,o2o网站建设信息1.post请求 /*** desc: (gateway主要接收前端请求 , 然后对请求的数据进行验证 , 验证之后请求反向代理到服务器 。*当请求 method 为 GET 时 , 可以顺利通过gateway 。 当请求 method 为 POST 时 , gateway则会报如下错误 。*jav…
1.post请求
/*** @desc: (gateway主要接收前端请求 , 然后对请求的数据进行验证 , 验证之后请求反向代理到服务器 。*当请求 method 为 GET 时 , 可以顺利通过gateway 。 当请求 method 为 POST 时 , gateway则会报如下错误 。*java.lang.IllegalStateException : Only one connection receive subscriber allowed.*实际上spring - cloud - gateway反向代理的原理是 , 首先读取原请求的数据 , 然后构造一个新的请求 ,*将原请求的数据封装到新的请求中 , 然后再转发出去 。 然而我们在他封装之前读取了一次request body ,*而request body只能读取一次 。 因此就出现了上面的错误 。*解决方案 : 读取request body的时候 , 我们再封装一次request , 转发出去)*/
@Component
public class PostFilter extends AbstractNameValueGatewayFilterFactory implements Ordered {@Overridepublic GatewayFilter apply(NameValueConfig nameValueConfig) {return (exchange, chain) -> {URI uri = exchange.getRequest().getURI();URI ex = UriComponentsBuilder.fromUri(uri).build(true).toUri();ServerHttpRequest request = exchange.getRequest().mutate().uri(ex).build();//封装我们的requestif ("POST".equalsIgnoreCase(request.getMethodValue())) {//判断是否为POST请求Flux<DataBuffer> body = request.getBody();AtomicReference<String> bodyRef = new AtomicReference<>();//缓存读取的request body信息body.subscribe(dataBuffer -> {CharBuffer charBuffer = StandardCharsets.UTF_8.decode(dataBuffer.asByteBuffer());DataBufferUtils.release(dataBuffer);bodyRef.set(charBuffer.toString());});//读取request body到缓存String bodyStr = bodyRef.get();//获取request bodyDataBuffer bodyDataBuffer = stringBuffer(bodyStr);Flux<DataBuffer> bodyFlux = Flux.just(bodyDataBuffer);request = new ServerHttpRequestDecorator(request) {@Overridepublic Flux<DataBuffer> getBody() {return bodyFlux;}};}return chain.filter(exchange.mutate().request(request).build());};}private DataBuffer stringBuffer(String value) {byte[] bytes = value.getBytes(StandardCharsets.UTF_8);NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT);DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length);buffer.write(bytes);return buffer;}@Overridepublic int getOrder() {return -100;}
}

2.网关

@Component
@ConfigurationProperties("auth.skip.urls")
@Getter
@Setter
@Slf4j
public class AuthorizeFilter implements GlobalFilter, Ordered {/*** 令牌的名字*/private static final String AUTHORIZE_TOKEN = "Authorization";private static final String APP_KEY = "joe-plat-dest";/*** Jwt解析的key*/private static final String JWT_SECRET_KEY = "joemicroservice";/*** ACCESS_TOKEN key*/private final static String ACCESS_TOKEN_REDIS_KEY = "USER:ACCESS_TOKEN:userInfo:";private final static String ACCESS_TOKEN_USERID_REDIS_KEY = "USER:ACCESS_TOKEN:userId:";/*** redis中access_token过期时间*/private static final Long ACCESS_TOKEN_EXPIRE_TIME = 7 * 24 * 60 * 60 * 1000L;/*** 接口放行路径*/private String[] skipAuthUrls;@Autowiredprivate StringRedisTemplate stringRedisTemplate;/*** 服务名*/@Value("${spring.application.name}")private String applicationName;@Bean@ConditionalOnMissingBeanpublic HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));}/*** 全局拦截** @param exchange* @param chain* @return*/@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {val traceId = UUID.randomUUID().toString().replace("-", "");MDC.put("traceId", traceId);MDC.put("requestId", UUID.randomUUID().toString().replace("-", ""));Object uriObj = exchange.getAttributes().get(GATEWAY_REQUEST_URL_ATTR);if (uriObj != null) {URI uri = (URI) uriObj;uri = this.upgradeConnection(uri, "http");exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, uri);}ServerHttpRequest request = exchange.getRequest();ServerHttpResponse response = exchange.getResponse();String url = exchange.getRequest().getURI().getPath();if (!(url.startsWith("berData") || url.endsWith("/push"))) {log.info("接受到的url路径为:" + url);}StringBuffer sb = new StringBuffer();String urlPrefix = sb.append("/").append(applicationName).toString();if (url.startsWith(urlPrefix)) {url = url.substring(applicationName.length() + 1);log.info("截取到的url路径为:" + url);}//跳过不需要验证的路径if (checkSkipAuthUrls(Arrays.asList(skipAuthUrls), url)) {return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().header("X-TraceId", traceId).build()).build());}//获取用户令牌信息//头文件中log.info("-----------------------获取请求头中的令牌---------------------");final String token = request.getHeaders().getFirst(AUTHORIZE_TOKEN);final String appId = request.getHeaders().getFirst(APP_KEY);//如果没有令牌,则拦截if (StringUtils.isEmpty(token)) {log.info("-----------------------未获取到token令牌---------------------");//设置没有权限的状态码401return unAuth(exchange, "登录失效,请重新登录", null);}//如果有令牌,则检验令牌是否有效try {String accessTokenRedisKey = ACCESS_TOKEN_USERID_REDIS_KEY + token;Boolean isExistKey = stringRedisTemplate.hasKey(accessTokenRedisKey);String redisKey = ACCESS_TOKEN_REDIS_KEY + token;Boolean isExistFlag = stringRedisTemplate.hasKey(redisKey);if (BooleanUtils.isTrue(isExistKey) || BooleanUtils.isTrue(isExistFlag)) {//判断用户是否有效,如果无效,返回指定状态码,跳出登陆if (Boolean.FALSE.equals(stringRedisTemplate.hasKey(ACCESS_TOKEN_USERID_REDIS_KEY + token))) {log.info("客户登陆状态无效,返回401");return unAuth(exchange, "登录失效,请重新登录", null);}if (BooleanUtils.isFalse(JwtUtils.validateToken(token))) {log.info("客户登陆状态无效,返回403");return unAuth(exchange, "登录失效,请重新登录", 403);}
//                stringRedisTemplate.expire(accessTokenRedisKey, ACCESS_TOKEN_EXPIRE_TIME, TimeUnit.MILLISECONDS);
//                stringRedisTemplate.expire(redisKey, ACCESS_TOKEN_EXPIRE_TIME, TimeUnit.MILLISECONDS);} else {return unAuth(exchange, "登录失效,请重新登录", null);}} catch (Exception e) {log.error("客户登陆失败, e:", e);return unAuth(exchange, "登录失效,请重新登录", null);}//将令牌封装到头文件中Consumer<HttpHeaders> httpHeaders = httpHeader -> {httpHeader.set(AUTHORIZE_TOKEN, token);httpHeader.set(APP_KEY, appId);};ServerHttpRequest serverHttpRequest = exchange.getRequest().mutate().headers(httpHeaders).build();exchange.mutate().request(serverHttpRequest).build();//有效,放行return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().header("X-TraceId", traceId).build()).build());}private Boolean checkSkipAuthUrls(List<String> skipAuthUrls, String url) {if (skipAuthUrls.contains(url)) {return true;}List<String> superSkipUrlList = skipAuthUrls.stream().filter(x -> x.contains("**")).collect(Collectors.toList());if (!CollectionUtils.isEmpty(superSkipUrlList)) {for (String x : superSkipUrlList) {if (url.startsWith(x.substring(0, x.indexOf("**")))) {return true;}}}return false;}private Mono<Void> unAuth(ServerWebExchange exchange, String msg, Integer errCode) {ServerHttpResponse response = exchange.getResponse();response.getHeaders().setContentType(MediaType.APPLICATION_JSON);response.setStatusCode(HttpStatus.OK);log.error("[鉴权异常处理]请求路径:{} ,状态码:{}", exchange.getRequest().getPath(),errCode == null ? HttpStatus.UNAUTHORIZED.value() : errCode);return response.writeWith(Mono.fromSupplier(() -> {DataBufferFactory bufferFactory = response.bufferFactory();return bufferFactory.wrap(JSON.toJSONBytes(ResponseResult.fail(errCode == null ? HttpStatus.UNAUTHORIZED.value() : errCode, msg)));}));}@Overridepublic int getOrder() {return 0;}private URI upgradeConnection(URI uri, String scheme) {UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUri(uri).scheme(scheme);if (uri.getRawQuery() != null) {uriComponentsBuilder.replaceQuery(uri.getRawQuery().replace("+", "%20"));}return uriComponentsBuilder.build(true).toUri();}}

http://www.hkea.cn/news/493445/

相关文章:

  • 日照网站建设价格百度推广怎么优化关键词的质量
  • 竭诚网络网站建设开发百度搜索竞价推广
  • 浙江住房和城乡建设厅报名网站下拉关键词排名
  • 银川哪里做网站百度网址名称是什么
  • 合肥公司网站建设价格低西安网络科技公司排名
  • 怎么样建设个人网站企业文化建设
  • 如何知道网站有没有备案成都seo公司
  • wordpress 艺术主题南京网络优化公司有哪些
  • 贵阳网站备案百度网站优化方案
  • 单位网站建设论文怎么做竞价托管
  • 建筑公司网站有哪些谈谈自己对市场营销的理解
  • 做ppt音乐怎么下载网站企业培训课程有哪些
  • magento网站建设网站优化排名软件网站
  • 做生鲜食品最好的网站网络推广及销售
  • 销售管理系统需求分析长沙seo代理
  • 站长网站查询深圳百度关键字优化
  • 用net语言做网站平台好不好企业培训师资格证报考2022
  • 成都定制网站设竞价推广遇到恶意点击怎么办
  • 制作视频网站建设友链交易网
  • 做外贸是不是要有网站腾讯企点app下载安装
  • 网站开发快递文件国外网站怎么推广
  • 网站和搜索引擎站长论坛
  • 做违法网站会怎样外贸独立站怎么建站
  • 云主机建网站教程深圳全网推互联科技有限公司
  • 做网站赚50万谷歌搜索引擎363入口
  • 台州网站设计外包网页制作公司排名
  • 网站建设投标文件范本亚马逊提升关键词排名的方法
  • 学做网站需要多长时间免费推广平台排行
  • wordpress运行php 404360优化大师下载
  • seo排名网站 优帮云线上推广的三种方式