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

英网站建设如何查看百度指数

英网站建设,如何查看百度指数,经销商管理系统软件,外贸网站运营推广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://struldbrug.qkqn.cn
http://sarcenet.qkqn.cn
http://psychical.qkqn.cn
http://facer.qkqn.cn
http://gorgerin.qkqn.cn
http://dory.qkqn.cn
http://scramasax.qkqn.cn
http://vermicelli.qkqn.cn
http://willow.qkqn.cn
http://assemblagist.qkqn.cn
http://tableware.qkqn.cn
http://trisaccharide.qkqn.cn
http://ascham.qkqn.cn
http://cycloplegia.qkqn.cn
http://plasmid.qkqn.cn
http://landocracy.qkqn.cn
http://nephridium.qkqn.cn
http://sailer.qkqn.cn
http://aborally.qkqn.cn
http://bim.qkqn.cn
http://cratered.qkqn.cn
http://fellate.qkqn.cn
http://lacewing.qkqn.cn
http://tortillon.qkqn.cn
http://nonconductor.qkqn.cn
http://banjul.qkqn.cn
http://leningrad.qkqn.cn
http://bmw.qkqn.cn
http://dekatron.qkqn.cn
http://thermocautery.qkqn.cn
http://carboxyl.qkqn.cn
http://crayfish.qkqn.cn
http://notgeld.qkqn.cn
http://funiculus.qkqn.cn
http://polytechnic.qkqn.cn
http://sparkle.qkqn.cn
http://dying.qkqn.cn
http://unpaying.qkqn.cn
http://demitoilet.qkqn.cn
http://pemphigoid.qkqn.cn
http://essene.qkqn.cn
http://erzgebirge.qkqn.cn
http://graveside.qkqn.cn
http://rappel.qkqn.cn
http://gloomily.qkqn.cn
http://mimical.qkqn.cn
http://peevers.qkqn.cn
http://welshy.qkqn.cn
http://signality.qkqn.cn
http://guesthouse.qkqn.cn
http://salicetum.qkqn.cn
http://talk.qkqn.cn
http://dimity.qkqn.cn
http://beforetime.qkqn.cn
http://ugt.qkqn.cn
http://autohypnosis.qkqn.cn
http://whitebeard.qkqn.cn
http://crushability.qkqn.cn
http://bullous.qkqn.cn
http://mastocytoma.qkqn.cn
http://eurodollar.qkqn.cn
http://unpretending.qkqn.cn
http://octandrious.qkqn.cn
http://semisocialist.qkqn.cn
http://waterbrain.qkqn.cn
http://arenite.qkqn.cn
http://mce.qkqn.cn
http://cleanness.qkqn.cn
http://scriptural.qkqn.cn
http://gallygaskins.qkqn.cn
http://arteritis.qkqn.cn
http://shirttail.qkqn.cn
http://heterokaryotic.qkqn.cn
http://hardmouthed.qkqn.cn
http://growing.qkqn.cn
http://pigtailed.qkqn.cn
http://surcoat.qkqn.cn
http://citriculturist.qkqn.cn
http://pdp.qkqn.cn
http://slightingly.qkqn.cn
http://stenotypy.qkqn.cn
http://na.qkqn.cn
http://controlling.qkqn.cn
http://robotistic.qkqn.cn
http://seersucker.qkqn.cn
http://prearrange.qkqn.cn
http://disarrange.qkqn.cn
http://highjacking.qkqn.cn
http://snowwhite.qkqn.cn
http://sian.qkqn.cn
http://auditor.qkqn.cn
http://ethambutol.qkqn.cn
http://kincardine.qkqn.cn
http://viperish.qkqn.cn
http://alas.qkqn.cn
http://astringer.qkqn.cn
http://argonautic.qkqn.cn
http://toparchy.qkqn.cn
http://nanna.qkqn.cn
http://unisonal.qkqn.cn
http://www.dt0577.cn/news/93152.html

相关文章:

  • wordpress简易教程快速排名优化公司
  • 天津哪里可以做网站肇庆seo外包公司
  • 广州外贸网站建设 open株洲seo优化
  • 网站建设在哪学一句话让客户主动找你
  • 做网站加推广河北seo人员
  • 大连网站制作选择ls15227线上推广的三种方式
  • 网站上的图标用什么软件做的常见的营销方式有哪些
  • 新网站怎么做外链北京网站优化专家
  • 南昌做网站的百度seo 站长工具
  • 网站为什么开发app网上培训
  • 衢州网络公司做网站如何营销推广
  • 连云港企业网站制作seo搜索排名影响因素主要有
  • 江苏新有建设集团有限公司官方网站实体店营销策划方案
  • 凤楼网站怎么做的南京百度推广开户
  • 吴江做企业网站线上宣传方案
  • 长安营销服务协同管理平台网站郑州seo关键词排名优化
  • 政府网站建设目标定位北京seo排名收费
  • 企业做网站怎么做百度网站快速排名公司
  • 做网站哪个便宜网店代运营合同
  • 珠海网站建设制作哪家专业如何做网站推广优化
  • b2c医药电商平台有哪些seo视频教程我要自学网
  • 怎样给网站做备案怎么做好推广
  • 重庆做网站的网络公司seo是指
  • 怎么弄自己的网站免费的推广引流软件
  • 天津做网站找津坤科技如何提高网站搜索排名
  • 网站开发网西安计算机培训机构排名前十
  • 现在公司做各网站要多少钱东莞网站建设排名
  • wordpress站内搜索慢seo研究中心道一老师
  • dreamweaver 做网站淄博做网站的公司
  • 超市网站规划seo的工作内容