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

安徽省建设厅网站官网c#做的网站怎么上传

安徽省建设厅网站官网,c#做的网站怎么上传,精品在线开发网站建设,html新闻列表springboot单机服务基于过滤器Filter实现第三方服务器接口请求代理功能 一、前言二、解决思路三、基于gateway实现四、基于过滤器Filter实现五、问题总结 **注#xff1a;本文源码获取或者更多资料#xff0c;关注公众号#xff1a;技术闲人**一、前言 在项目开发时会遇到w… springboot单机服务基于过滤器Filter实现第三方服务器接口请求代理功能 一、前言二、解决思路三、基于gateway实现四、基于过滤器Filter实现五、问题总结 **注本文源码获取或者更多资料关注公众号技术闲人**一、前言 在项目开发时会遇到web端/接口请求第三方服务接口的场景对web请求来说最后请求的服务地址是一个避免跨域问题在微服务场景经常使用gateway等网关服务实现或者使用nginx代理组件实现但是不同三方服务有不同的鉴权要求但是后端服务最好有相同的鉴权 二、解决思路 在非微服务架构和三方不同鉴权接口的服务场景下通过过滤器Filter实现请求转发并使用适配器设计模式兼容不同的三方服务请求鉴权减少重复代码开发也能监控所有的服务请求并对所有请求做限流、统计等操作 三、基于gateway实现 在没有spring-boot-starter-web依赖的场景下可以使用gatewaySpring MVC基于Servlet的Web应用程序和Spring Cloud Gateway基于反应式编程的API网关但是这两个组件是不兼容的。Spring Cloud Gateway是专为反应式编程设计的使用Spring WebFlux作为底层框架而Spring MVC则基于Servlet API。 gateway实现代码 package com.sk.proxytest;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean;SpringBootApplication public class ProxyTestApplication {public static void main(String[] args) {SpringApplication.run(ProxyTestApplication.class, args);}Beanpublic RouteLocator myRoutes(RouteLocatorBuilder builder) {return builder.routes().route(p - p.path(/test/**).uri(http://127.0.0.1:8089/api)).build();}}四、基于过滤器Filter实现 本文主要使用过滤器Filter实现既能控制代理请求又能最少开发量 GET请求结果 POST请求结果 实现源码 ProxyFilter.java package com.sk.proxytest.proxy;import com.sk.proxytest.proxy.bean.ProxyParam; import com.sk.proxytest.proxy.bean.ProxyResult; import com.sk.proxytest.proxy.strategy.ProxyHandleService; import com.sk.proxytest.proxy.strategy.ProxyHandleStrategyFactory; import com.sk.proxytest.proxy.strategy.ProxyStrategyContext; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate;import javax.annotation.Resource; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Map;Slf4j Configuration WebFilter(filterName ProxyFilter, urlPatterns /proxy/*) public class ProxyFilter implements Filter {Resourceprivate RestTemplate restTemplate;Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse) servletResponse;String proxyType request.getHeader(proxy-type);ProxyStrategyContext proxyStrategyContext new ProxyStrategyContext();ProxyHandleService proxyHandleService ProxyHandleStrategyFactory.getProxyHandleStrategy(proxyType);proxyStrategyContext.setProxyHandleStrategy(proxyHandleService);ProxyResult proxyResult proxyStrategyContext.handleProxy(new ProxyParam());boolean flag true;if (null ! proxyResult) {PrintWriter writer null;try {String body IOUtils.toString(request.getInputStream());HttpEntity? entity new HttpEntity(body, proxyResult.getHeaders());String url proxyResult.getProxyUrl() getNewUrl(request);log.info(-----------new-url:{}, url);ResponseEntityString responseEntity restTemplate.exchange(url, HttpMethod.resolve(request.getMethod()), entity, String.class);response.setStatus(responseEntity.getStatusCodeValue());writer response.getWriter();writer.write(responseEntity.getBody());writer.flush();flag false;} catch (Exception e) {log.error(------error:{}, e);} finally {if (writer ! null) {writer.close();}}}if (flag) {chain.doFilter(request, response);}}Overridepublic void destroy() {Filter.super.destroy();}//获取被代理的url和参数private String getNewUrl(HttpServletRequest request) {String proxyUrl request.getRequestURI().replace(/proxy, );MapString, String[] parameterMap request.getParameterMap();int i 0;for (Map.EntryString, String[] entry : parameterMap.entrySet()) {String key entry.getKey();String value entry.getValue()[0];if (i 0) {proxyUrl proxyUrl ? key value;} else {proxyUrl proxyUrl key value;}}return proxyUrl;} }ProxyHandleService.java package com.sk.proxytest.proxy.strategy;import com.sk.proxytest.proxy.bean.ProxyParam; import com.sk.proxytest.proxy.bean.ProxyResult;public interface ProxyHandleService {ProxyResult proxyHandle(ProxyParam proxyParam);}AlibabaProxyHandleStrategy.java package com.sk.proxytest.proxy.strategy;import com.sk.proxytest.proxy.bean.ProxyParam; import com.sk.proxytest.proxy.bean.ProxyResult; import org.springframework.http.HttpHeaders;public class AlibabaProxyHandleStrategy implements ProxyHandleService {Overridepublic ProxyResult proxyHandle(ProxyParam proxyParam) {HttpHeaders headers new HttpHeaders();//TODO 根据三方服务登录接口获取鉴权信息String token token--------;headers.add(token, token);headers.add(Content-Type,application/json);//三方服务ip和portString ip 127.0.0.1;String port 8080;String proxyUrl http:// ip : port;return new ProxyResult(headers, proxyUrl);} }ProxyHandleStrategyFactory.java package com.sk.proxytest.proxy.strategy;import java.util.HashMap; import java.util.Map;public class ProxyHandleStrategyFactory {private static MapString, ProxyHandleService proxyHandleServiceMap;static {proxyHandleServiceMap new HashMap();proxyHandleServiceMap.put(alibaba, new AlibabaProxyHandleStrategy());}public static ProxyHandleService getProxyHandleStrategy(String proxyType){return proxyHandleServiceMap.get(proxyType);}}ProxyStrategyContext.java package com.sk.proxytest.proxy.strategy;import com.sk.proxytest.proxy.bean.ProxyParam; import com.sk.proxytest.proxy.bean.ProxyResult;public class ProxyStrategyContext {private ProxyHandleService proxyHandleService;public void setProxyHandleStrategy(ProxyHandleService proxyHandleService){this.proxyHandleService proxyHandleService;}public ProxyResult handleProxy(ProxyParam proxyParam){if(proxyHandleService ! null){return proxyHandleService.proxyHandle(proxyParam);}return null;}}五、问题总结 在单机服务中gateway过于重并且与springMVC有冲突nginx代理服务不能同一鉴权或者同一鉴权太过于麻烦过滤器Filter适配器模式正好满足我们业务场景需求 功能实现的方式选择还是要考虑业务场景。
http://www.dnsts.com.cn/news/187364.html

相关文章:

  • 家政公司网站建设方案视频网站 费用
  • 建筑工程网上报建网站诚信手册wordpress 静态插件
  • 做一个网站需要服务器吗郴州专业的网站建设
  • 中英双语网站程序金融网站建设方法
  • 济南做网站哪里便宜成都微信网站建设多少
  • 南昌营销网站公司网站整站开发视频教程
  • 怎么做才能使网站ip增多洮南做网站
  • 重庆企业网站设计维护东营做网站公司
  • 美团网站除佣金表格怎么做网站seo诊断湖南岚鸿诊断
  • 怎么做一个单页的网站答题app制作教程
  • 公司网站开发项目管理制度自己设置网站
  • 山东省住房城乡建设厅查询网站大连网站制作中企动力
  • html5网站有点如何用ae做模板下载网站
  • 钓鱼网站网址大全wordpress cpu 100
  • 甘肃建设职工教育培训中心网站唐山市城乡建设网站
  • 苏州网站推广建设中铁建设集团有限公司总承包公司
  • 手机网站 代码格式做动画在线观看网站
  • 网站做ppt模板域名解析网站建设
  • 江西省城乡建设厅建设网站阿里云云主机做网站
  • 建设中心小学网站开发商不给办房产证怎么办
  • 做公益做的好的的网站肇庆住房建设部网站
  • 增城营销网站建设哪里能找到网站
  • 网站推广怎么推网站标签图标代码
  • 山东三强建设咨询有限公司网站企业形象设计包括哪些方面
  • 深圳企业黄页网站wordpress acf 收费
  • 成都快速建站模板什么是企业形象设计
  • 网站中如何做图片轮播沈阳高端关键词优化
  • 会泽网站建设服装网站建设价格
  • 哪些网站可以接设计的单子做湘潭网络营销
  • 门户网站编辑流程二建注册进度查询系统