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

php自己做网站广州科技有限公司

php自己做网站,广州科技有限公司,佛山网站制作外包,网站开发相关期刊概述 Spring Cloud Netflix zuul组件是微服务架构中的网关组件,Zuul作为统一网关,是所有访问该平台的请求入口,核心功能是路由和过滤。 目前公司业务就是基于Zuul搭建的网关服务,且提供的服务包括转发请求(路由)、黑名单IP访问拦截、URL资源访问时的权限拦截、统一访问日志记…概述 Spring Cloud Netflix zuul组件是微服务架构中的网关组件,Zuul作为统一网关,是所有访问该平台的请求入口,核心功能是路由和过滤。 目前公司业务就是基于Zuul搭建的网关服务,且提供的服务包括转发请求(路由)、黑名单IP访问拦截、URL资源访问时的权限拦截、统一访问日志记录/异常处理/单点登录引导功能。本文主要内容Zuul的执行流程、Zuul过滤实现、Zuul安全配置、Zuul路由配置、Zuul集成Hystrix、Zuul集成Zipkin与Sleuth Zuul项目实战 Zuul执行流程 接收请求 客户端发送请求到Zuul服务器(前置经过Nginx反向代理)Pre-filters 请求首先通过Pre类型的过滤器这些过滤器可以进行安全检查、身份验证、日志记录、选择路由等操作。路由转发Routing 如果Pre-filter通过请求将被路由到具体的微服务实例上。Zuul 可以根据配置的路由规则将请求转发到不同的后端服务。服务调用 Zuul通过Fegin进行客户端负载均衡选择一个服务实例进行调用Post-filters 服务处理完成后响应会返回并经过 Post 类型的过滤器这些过滤器可以修改返回的响应头、收集统计信息等。最终Zuul将响应发送回客户端Error-filters 如果在任何阶段发生错误请求将被转发到 Error 类型的过滤器进行错误处理后经过Post-filters,最终Zuul将响应发送回客户端 Zuul过滤器 网关过滤器 pre-filter 前置过滤器在请求被路由到源服务器之前执行,通常继承ZuulFilter抽象类。实际项目中我们使用前置过滤器对于400到500的状态错误码进行过滤,进而对于从cas认证服务中获取token的特定请求进行错误日志的记录 package test.gateway.filter;import org.springframework.cloud.netflix.zuul.util.ZuulRuntimeException; import test.common.util.R; import com.google.gson.Gson; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException;/*** Description: 捕获400到500错误码,否则不执行该过滤器*/ public class ErrorStatusCodeZuulFilter extends ZuulFilter {protected static String GET_TOKEN_URI /cas/getToken;Overridepublic String filterType() {return post;}Overridepublic int filterOrder() {return -1; // Needs to run before SendResponseFilter which has filterOrder 0}Overridepublic boolean shouldFilter() { int statusCode Integer.parseInt(RequestContext.getCurrentContext().get(responseStatusCode).toString());return statusCode 400 statusCode 500;}Overridepublic Object run() {RequestContext ctx RequestContext.getCurrentContext();int statusCode Integer.parseInt( ctx.get(responseStatusCode).toString()); String uri ctx.get(requestURI).toString();if (uri ! null uri.equals(GET_TOKEN_URI)) { //获取token请求失败RString res new R(); res.setCode(statusCode);res.setData(null);res.setMsg(Account or password error);ctx.setResponseBody(new Gson().toJson(res));return null;}try {throw new Exception();} catch (Throwable t) { throw new ZuulRuntimeException(new ZuulException(t, statusCode, t.getMessage()));}} }routing-filter 处理将请求发送到源服务器的逻辑 post-filter 后置过滤器在请求被路由后执行可以对响应进行修改或添加额外的HTTP等。 error-filter 当请求处理过程中发生错误时这些过滤器会被调用,同时最终也会调用后置post类型过滤器返回  扩展-OncePerRequestFilter OncePerRequestFilter是Spring Framework中的一个接口它属于Servlet过滤器Filter的范畴但不是Zuul中定义的特定过滤器类型。在Spring MVC中OncePerRequestFilter确保每个请求只被处理一次。它通过同步代码块来保证即使在支持异步处理的 Spring MVC 应用程序中请求也不会被重复处理。项目中我们通过自定义过滤器(继承OncePerRequestFilter)处理访问公共接口且未携带token的请求,该过滤器也属于前置的过滤器,因为它通常用于在请求进入其他阶段之前执行某些操作。 Zuul安全配置 自定义WebSecurityConfig 在Spring Security的上下文中,WebSecurityConfig类通常用于配置Spring Security的安全策略。此类继承自WebSecurityConfigurerAdapter,WebSecurityConfig可以用来定义Zuul网关的安全设置,通过提供了一种自定义安全配置的方法实现,实际项目中我们对zuul进行的http请求相关安全配置 package test.zuul.config; import .../*** Description: Zuul http configuration*/ Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { // 定义Zuul网关的安全设置private final static Logger logger LoggerFactory.getLogger(WebSecurityConfig.class);Autowiredprivate FilterIgnorePropertiesConfig filterIgnorePropertiesConfig;Autowiredprivate FindByIndexNameSessionRepository? extends Session sessionRepository;Autowiredprivate RedisOperationsSessionRepository redisOperationsSessionRepository; Autowiredprivate AuthenticationServiceFeign authenticationService;Overridepublic void configure(HttpSecurity http) throws Exception {http.csrf().disable(); //禁用csrfhttp.headers().frameOptions().disable();ExpressionUrlAuthorizationConfigurerHttpSecurity.ExpressionInterceptUrlRegistry registry http.antMatcher(/**) // 允许所有请求.authorizeRequests();filterIgnorePropertiesConfig.getUrls().forEach(url - registry.antMatchers(url).permitAll());registry.anyRequest().authenticated();http.exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(/login/idpbg)) .and().logout().logoutUrl(/logout).addLogoutHandler(new LogoutHandler() { //登出后处理逻辑Overridepublic void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { if(authentication ! null) {String indexName authentication.getName();// 查询用户的 Session 信息 MapString, ? extends Session userSessions sessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, indexName);// 删除当前用户相关sessionListString sessionIds new ArrayList(userSessions.keySet());for (String session : sessionIds) {redisOperationsSessionRepository.deleteById(session);}//删除系统当前在线用户信息...}Cookie cookie new Cookie();//重置cookie...response.addCookie(cookie);}}).logoutSuccessHandler(logoutSuccessHandler()).oauth2Login().and().oauth2Client(); }private LogoutSuccessHandler logoutSuccessHandler() { //登出成功后处理逻辑return new LogoutSuccessHandler() {Overridepublic void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)throws IOException, ServletException {if(authentication ! null) {if(authentication.getDetails() instanceof OAuth2AuthenticationDetails) {// 刪除JWT......}}new SecurityContextLogoutHandler().logout(request, null, null);try {response.sendRedirect(/); //重定向到登录页面}} catch (IOException e) {e.printStackTrace();}}};} } Zuul-路由规则 # 默认情况下所有的eureka上的服务都会被zuul自动地创建映射关系来进行路由,# 设置ignored-services: * 时避免注册到Eureka中的服务被Zuul默认路由从而避免不必要的服务暴露ignored-services: * routes:# CAS 路由配置cas-server:sensitiveHeaders: path: /cas/**serviceId: cas-serverstrip-prefix: false #表示Zuul不会移除请求的URI路径前面的/cas/部分# END CAS路由配置..其他服务路由配置.. Zuul-熔断 在项目开发Zuul服务时,通常会集成Hystrix,并通过HystrixH对依赖的微服务进行熔断保护防止单个服务的故障影响到整个系统 hystrix:command:default:execution:isolation:thread:# hystrix超时时间计算方法 ribbonTimeout(ReadTimeout ConnectTimeout) * (maxAutoRetries 1) * (maxAutoRetriesNextServer 1)# timeoutInMilliseconds (600000 600000) * 1 * 2timeoutInMilliseconds: 2400000# 仅正式局配置Threadpool参数threadpool:default:coreSize: 50maximumSize: 10000allowMaximumSizeToDivergeFromCoreSize: truemaxQueueSize: -1ribbon: # Zuul 如果使用 Eureka查找路由,则需要配置ConnectTimeout和SocketTimeoutConnectTimeout: 600000 # 6min由于通过网关存在下载/导报表服务,此类需求建立连接耗时比较长,所以设置为6minSocketTimeout: 600000 # 6min由于通过网关存在下载/导报表服务,此类需求建立连接耗时比较长,所以设置为6minReadTimeout: 600000 # 6min由于通过网关存在下载/导报表服务,此类需求建立连接耗时比较长,所以设置为6minMaxAutoRetries: 0MaxAutoRetriesNextServer: 1 #下一个服务调用自动重试次数MaxTotalConnections: 400 # okhttp模式下最大连接数量eureka:enabled: true #通过Eureka路由到具体微服务httpclient:enabled: falseokhttp: #use okhttp will betterenabled: truefeign: httpclinet: #use okhttp will betterenabled: falseokhttp: enabled: true Zuul-Zipkin与Sleuth Sleuth是Spring Cloud的一个组件用于在微服务架构中提供分布式跟踪解决方案。Sleuth通常与Zipkin等分布式跟踪系统配合使用可以生成请求链路的跟踪信息帮助开发者理解请求在系统中流动的路径从而优化性能和定位问题,项目中我们在application.yml文件配置 zipkin:#base-url: http://10.169.33.369/ # Zipkin Server URL, 仅当spring.zipkin.sender.typeweb才需要设置,基于消息服务则不需要设置enabled: true # 启用Zipkin,默认truesender:type: rabbit # 微服務基于消息服务发送 Zipkin Data到Zipkin Serverrabbitmq:queue: zipkin # 对应RabbitMq的队列名,仅当spring.zipkin.sender.typerabbit时有效,默认配置为zipkinsleuth:web:client:enabled: true # 对于web请求是否开启sleuth功能。默认为true。sampler:probability: 0.1 # 1.0即100%收集 默认0.1
http://www.hkea.cn/news/14507938/

相关文章:

  • 咸阳企业网站建设phpcms 做好网站怎么保存
  • 十天学会网站建设公司网站开发费用账务处理
  • 有什么字体设计网站健康东莞app怎么下载
  • 绵阳 网站开发天津建网站的公司
  • 怎么用云服务器建设网站网站500m空间价格
  • 建一个企业网站多少钱手机钓鱼网站制作
  • 做网站怎样收费的义务网网站建设方案
  • 广东网站建设方案html5软件官网
  • wordpress替换图片不显示网站如何做优化
  • 中山免费建网站滁州seo
  • 厦门大型服装商城网站建设宁波软件开发公司排名
  • 哪个网站做餐饮推广最好网站添加背景音乐
  • 济南做网站优化价格站外推广
  • php网站添加验证码市场推广方案
  • 著名设计师网站重庆it培训机构
  • 国内做的比较好的协会网站用wordpress 登录
  • 做网站seo的步骤wordpress 载入
  • 无极领域付费网站网页传奇游戏排行榜比亚迪
  • 制作自己的网站删除wordpress版权
  • 微信分销小程序开发谷歌英文网站优化
  • wordpress能做跨境电商seo诊断网站免费诊断平台
  • 网站怎么添加广告代码买房子怎么找房源
  • 网站开发取名千阳做网站
  • 上海建站外贸分类信息网站怎么做
  • 网站一个人可以做吗南京做中英文网站
  • 广州城市建设网站广州装修公司口碑最好的是哪家
  • 可以做业务推广的网站有哪些国网商城怎么入驻
  • 抖音的电子商务网站建设wordpress 新建文件
  • 制作婚纱摄影网站管理图微网站需
  • 用织梦建设网站手机怎样做网站