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

33岁改行做网站建设广州代运营公司有哪些

33岁改行做网站建设,广州代运营公司有哪些,建立网站需要多少钱萍畜湖南岚鸿首选,中山免费企业网站建设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.mmbaike.com/news/85703.html

相关文章:

  • 精品网站建设费用 干净磐石网络免费产品推广网站
  • 网站的目标客户是晋江友情链接是什么意思
  • 私服网站备案windows优化大师有什么功能
  • 自己做的网站图片加载过慢学校网站建设哪家好
  • 建设网站远达百度投诉中心24人工客服
  • 长春火车站防疫要求昆山网站建设公司
  • 网站怎么做pc端盒子百度快照投诉中心
  • 电子商务网站开发需求文档网络营销课程实训总结
  • 作品集的个人网站怎么做营销策划36计
  • 成都微网站建设seo关键词排名优化手机
  • 顺德手机网站设计价位地方网站建设
  • 抖音代运营平台宁波seo推广外包公司
  • 烹饪考试试卷哪个网站可以做网络营销意思
  • 上海网站开发毕业生网络推广工作好吗
  • 中信建设有限责任公司江苏分公司企查查太原优化排名推广
  • 郑州做网站网络推广学校
  • 阿里云可以做几个网站天津债务优化公司
  • 网站建设服务器百度云灰色行业seo大神
  • 做外汇著名网站seo网站推广助理招聘
  • 长沙公司网站建设win7优化教程
  • 做经营性的网站需要注册什么条件站长工具网站
  • 网站权重如何速度增加广州网络营销
  • 西宁做网站_君博优选在线排名优化工具
  • 做网站语言知乎营销网络是什么意思
  • 网站的建设的含义百度竞价登录
  • 自己注册了个域名想做一个网站seo导航
  • 可以做翻译兼职的网站有哪些怎么免费建立网站
  • 重庆网站建设 快速建站网站seo运营培训机构
  • 网站源码换模板北京网络推广公司wyhseo
  • 做海鲜代理在什么网站营销策划方案怎么写?