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

网站恶意点击wordpress支付宝移动端

网站恶意点击,wordpress支付宝移动端,wordpress press,公司注册网站模板欢迎大家关注我的JAVA面试题专栏#xff0c;该专栏会持续更新#xff08;第一目标100节#xff09;#xff0c;从原理角度覆盖Java知识体系的方方面面。 一文吃透JAVA知识体系#xff08;面试题#xff09;https://blog.csdn.net/wuxinyan123/category_7521898.html?fr…欢迎大家关注我的JAVA面试题专栏该专栏会持续更新第一目标100节从原理角度覆盖Java知识体系的方方面面。 一文吃透JAVA知识体系面试题https://blog.csdn.net/wuxinyan123/category_7521898.html?fromshareblogcolumnsharetypeblogcolumnsharerId7521898sharereferPCsharesourcewuxinyan123sharefromfrom_link 1、Zuul简介  Spring Cloud Zuul是Netflix开源的一款提供动态路由、监控、弹性、安全等网关服务的框架。它作为一个微服务的入口点通过路由配置将不同路径的请求转发到不同的服务同时Zuul也支持动态路由配置能够在运行时根据需要动态更新路由信息而不影响系统的可用性。 使用Zuul一般在微服务数量较多多于10个的时候推荐使用对服务的管理有严格要求的时候推荐使用当微服务权限要求严格的时候推荐使用。 网关有以下几个作用 统一入口未全部为服务提供一个唯一的入口网关起到外部和内部隔离的作用保障了后台服务的安全性。鉴权校验识别每个请求的权限拒绝不符合要求的请求。动态路由动态的将请求路由到不同的后端集群中。减少客户端与服务端的耦合服务可以独立发展通过网关层来做映射。 2、动态路由 在微服务架构中动态路由是指在运行时根据特定的规则或条件动态地将外部请求转发到相应的微服务实例。 动态路由的实现依赖于几个关键组件路由配置中心、路由发现机制、以及路由规则的动态更新。 路由配置中心是存储路由规则的中央存储可以是数据库、文件或专用的配置服务器。 路由发现机制则用于监控微服务实例的状态并将最新的服务实例信息推送到路由配置中心。动态更新路由规则依赖于配置中心与服务网关的实时同步能力。 Spring Cloud Zuul动态路由的实现依赖于服务发现组件例如Eureka当服务实例发生变化时Zuul会订阅服务注册中心的通知并根据最新的实例信息动态更新路由表从而达到动态路由的效果。 1基于规则的路由配置 Zuul中的路由匹配规则使用了Ant风格定义一共有三种不同的通配符 通配符含义解释?匹配任意单个字符匹配/feign-consumer/a,/feign-consumer/b,/feign-consumer/c等*匹配任意数量的字符匹配/feign-consumer/aaa,feign-consumer/bbb,/feign-consumer/ccc等无法匹配/feign-consumer/a/b/c**匹配任意数量的字符匹配/feign-consumer/aaa,feign-consumer/bbb,/feign-consumer/ccc等也可以匹配/feign-consumer/a/b/c zuul:routes:myservice:path: /my-service/** 所有匹配 /my-service/** 路径的请求都会被转发到服务ID为 my-service 的服务上。这种基于路径前缀的路由规则是实现动态路由的一种简单方式。 单实例 serviceId 映射详细配置 ### 网关配置 zuul:# 路由信息配置routes:# 针对某个服务的配置可自定义demo-order://访问的路径此处要以 /do/ 开头path: /do/**//后端服务的实例 Id。以 /do/ 开头的请求都会向后端服务 demo-order 进行转发serviceId: demo-order//剥夺前缀此配置是针对上方 path 配置的项//为 true 的情况下向后端转发之后是不会携带 /do 的。为 false 则相反stripPrefix: true//不向后端服务传递的敏感头信息sensitiveHeaders: Cookie,Set-Cookie,Authorization(2基于服务发现的路由配置 基于服务发现的路由配置更为动态它允许Zuul根据服务名来自动发现服务实例并构建路由映射。 Zuul默认会将通过以服务名作为ContextPath的方式创建路由映射比如将path:/user/**的请求转发到service-iduser的服务上(根据ContextPath查找对应的服务需要结合服务发现机制如Eureka等) zuul:routes:myservice:serviceId: my-service 3、过滤器机制 过滤器Filter是保障请求和响应数据安全、质量的重要组件。它类似于网络中路由器的功能允许或拒绝数据包的传递但又增加了对数据包内容的处理能力用过滤器来控制进入系统的请求。 Zuul提供了一个排序的机制允许开发者在配置文件中为每个过滤器指定一个顺序值。数字越小表示过滤器越早执行。若不指定系统会默认给定一个顺序值。 1外部http请求响应流程 在Zuul中过滤器分为两种类型 PRE过滤器 在请求被路由到后端服务之前执行可以用于进行身份验证、权限校验、日志记录等操作。POST过滤器 在请求已经被后端服务响应之后执行可以用来修改响应的内容或者根据请求的响应状态进行进一步的处理。 第一个阶段被pre类型的过滤器进行处理。该类型过滤器的主要目的是在进行请求路由之前做一些前置加工比如请求的校验等。 第二个阶段路由请求转发阶段。请求将会被routing类型的处理器处理。这里的具体处理内容就是将外部请求转发到具体服务实例上去的过程。 第三个阶段被post类型的过滤器处理这些过滤器在处理的时候不仅可以获取到请求信息还能获取到服务实例的返回信息所以在post类型的过滤器中我们可以对处理结果进行一些加工或转换等内容。 另外还有一个特殊的阶段error该阶段只有在上述三个阶段中发生异常的时候才会触发但是它的最后流向还是post类型的过滤器因为它需要通过post过滤器将最终结果返回给请求客户端。 2pre过滤器 ServletDetectionFilter执行顺序-3最先被执行的过滤器。该过滤器总是会被执行主要用来检测当前请求是通过Spring的DispatcherServlet处理运行的还是通过ZuulServlet来处理运行的。它的检测结果以布尔类型保存在当前请求上下文的isDispatcherServletRequest参数中后续的过滤器通过判断请求处理源头实现不同的处理机制。 一般外部请求都会被Spring的DispatcherServlet处理除了通过/zuul/*路径访问的请求会绕过DispatcherServlet比如之前我们说的大文件上传被ZuulServlet处理主要用来应对大文件上传的情况。另外对于ZuulServlet的访问路径/zuul/*我们可以通过zuul.servletPath参数进行修改。         Servlet30WrapperFilter执行顺序为-2第二个执行目前的实现会对所有请求生效将原始的HttpServletRequest包装成Servlet30RequestWrapper对象。         FormBodyWrapperFilter执行顺序为-1第三个执行。该过滤器仅对两类请求生效第一类是Context-Type为application/x-www-form-urlencoded的请求第二类是Context-Type为multipart/form-data并且是由String的DispatcherServlet处理的请求用到了ServletDetectionFilter的处理结果。该过滤器的主要目的是将符合要求的请求体包装成FormBodyRequestWrapper对象。         DebugFilter执行顺序为1第四个执行根据配置参数zuul.debug.request和请求中的debug参数来决定是否执行过滤器中的操作。它的具体操作内容是将当前请求上下文中的debugRouting和debugRequest参数设置为true。后续的各个过滤器中可利用这二个值来定义一些debug信息可以通过参数的方式激活这些debug信息帮助分析问题。         PreDecorationFilter执行顺序是5pre阶段最后被执行的过滤器判断当前请求上下文中是否存在forward.do和serviceId参数如果都不存在会执行具体过滤器的操作如果有一个存在的话说明当前请求已经被处理过了因为这二个信息就是根据当前请求的路由信息加载进来的。具体操作内容是为当前请求做一些预处理比如说进行路由规则的匹配在请求上下文中设置该请求的基本信息以及将路由匹配结果等一些设置信息等这些信息将是后续过滤器进行处理的重要依据我们可以通过RequestContext.getCurrentContext()来访问这些信息。另外还可以对HTTP头请求进行处理比如X-Forwarded-Host,X-Forwarded-Port。也可以通过设置zuul.addProxyHeadersfalse关闭对这些头域的添加动作。 3route过滤器 RibbonRoutingFilter执行顺序10route阶段第一个执行的过滤器。只对请求上下文中存在serviceId参数的请求进行处理即只对通过serviceId配置路由规则的请求生效。该过滤器的执行逻辑就是面向服务路由的核心它通过使用ribbon和hystrix来向服务实例发起请求并将服务实例的请求结果返回。         SimpleHostRoutingFilter执行顺序100route阶段第二个执行的过滤器。该过滤器只对通过url配置路由规则的请求生效。执行逻辑就是直接向routeHost参数的物理地址发起请求源码中是直接通过httpclient包实现的没有用Hystrix命令进行包装所以这类请求并没有线程隔离和断路器的保护。         SendForwardFilter执行顺序500route阶段第三个执行的过滤器。只对请求上下文中存在的forward.do参数进行处理请求即用来处理路由规则中的forward本地跳转装配。 4自定义过滤器 实现的过滤器必须包含4个基本特征过滤类型执行顺序执行条件具体操作。 String filterType(); int filterOrder(); boolean shouldFilter(); Object run(); filterType过滤器的类型zuul中默认定义了4个不同的生命周期过程类型具体如下 pre可以在请求被路由之前调用routing 路由请求时被调用post在routing和error过滤器之后被调用error处理请求时发生错误时被调用 filterOrder过滤器执行顺序数值越小优先级越高。 shouldFilter过滤器是否执行。通过此方法来指定过滤器的有效范围。 run过滤器的具体逻辑。可以实现自定义的过滤逻辑来确定是否要拦截当前的请求不对其进行后续的路由或是在请求路由返回结果之后对处理结果做一些加工等。 基本步骤自定义过滤器需要继承Zuul提供的抽象类 ZuulFilter 并实现其抽象方法。 创建过滤器类 实现 ZuulFilter 抽象类并重写方法。定义过滤类型 指定 filterType 方法返回值是 pre 或 post 。设置过滤顺序 实现 filterOrder 方法返回过滤器执行的顺序。定义过滤条件 通过 shouldFilter 方法定义何时激活过滤器。执行过滤逻辑 实现 run 方法在该方法中编写具体的过滤逻辑。 案例用Zuul网关ZuulFilter过滤器实现登录鉴权 import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.apache.commons.lang.StringUtils; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;/*** 登录过滤器*/ //这个注解不要忘了加入spring容器中 Component public class LoginFilter extends ZuulFilter {/*** 过滤器类型* org.springframework.cloud.netflix.zuul.filters.support.FilterConstants 这个类* pre在请求被路由转发之前调用* route在路由请求转发时被调用* error服务网关发生异常时被调用* post在路由转发请求后调用* return*/Overridepublic String filterType() {//前置过滤器return PRE_TYPE;}/*** 过滤器顺序越小越先执行* return*/Overridepublic int filterOrder() {return 4;}/*** 过滤器是否生效* return*/Overridepublic boolean shouldFilter() {RequestContext requestContext RequestContext.getCurrentContext();HttpServletRequest request requestContext.getRequest();System.out.println(request.getRequestURI()); ///apigateway/product/api/v1/product/listSystem.out.println(request.getRequestURL()); //http://localhost:9000/apigateway/product/api/v1/product/list//ACL//进行拦截就会进入下面的 run方法中if (request.getRequestURI().contains(/apigateway/orderapi/ordermapping/savedingdan)){return true;}//不拦截放行return false;}/*** 业务逻辑* return* throws ZuulException*/Overridepublic Object run() throws ZuulException {//获取上下文RequestContext requestContext RequestContext.getCurrentContext();//获取request对象HttpServletRequest request requestContext.getRequest();//token对象String token request.getHeader(token);if(StringUtils.isBlank((token))){token request.getParameter(token);}//登录校验逻辑 根据公司情况自定义 JWT//token为空就不能访问if (StringUtils.isBlank(token)) {//停止访问并返回出错的消息requestContext.setSendZuulResponse(false);//防止中文乱码requestContext.getResponse().setContentType(text/html;charsetUTF-8);//设置返回的状态码和正文requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());requestContext.setResponseBody(userToken is null);}//正常的话继续向下走return null;} } 4、一些高级应用场景 1使用OAuth2.0进行身份验证 OAuth2.0是一种行业标准的授权协议允许用户提供一个令牌而不是用户名和密码来访问数据。微服务架构中使用OAuth2.0可以确保只有经过认证的用户或服务才能访问受保护的资源。 在Zuul网关中实现OAuth2.0身份验证通常涉及以下步骤 在Zuul网关中配置一个过滤器拦截所有进入的请求。检查请求中的 Authorization 头部是否存在有效的令牌。如果令牌有效则将请求转发至相应的微服务如果令牌无效或不存在则返回认证错误。 示例代码 public class OAuthFilter extends ZuulFilter {Overridepublic boolean shouldFilter() {return true;}Overridepublic Object run() {String authHeader request.getHeader(Authorization);// 验证逻辑if (isValidToken(authHeader)) {// 令牌有效return null;} else {// 令牌无效response.setStatus(HttpStatus.FORBIDDEN.value());return null;}}private boolean isValidToken(String authHeader) {// Token验证逻辑此示例省略return true;}Overridepublic String filterType() {return pre;}Overridepublic int filterOrder() {return 1;} } 2利用JWT进行授权控制 JSON Web Token (JWT) 是一个开放标准用于在各方之间安全地传输信息。在Zuul中可以利用JWT来传递用户身份信息和授权数据。 以下是使用JWT的基本步骤 用户登录后服务端验证身份并生成JWT返回给客户端。客户端将JWT存储在本地通常是Cookie或者localStorage。客户端发送请求到Zuul网关网关会从请求中提取JWT。Zuul网关验证JWT的有效性并提取JWT中的授权信息。根据授权信息Zuul决定是否将请求转发到后端服务。 实现JWT验证的Zuul过滤器代码示例 public class JwtFilter extends ZuulFilter {Overridepublic boolean shouldFilter() {return true;}Overridepublic Object run() {String token extractTokenFromRequest(request);// 验证JWT逻辑if (isValidJwt(token)) {// JWT有效return null;} else {// JWT无效response.setStatus(HttpStatus.UNAUTHORIZED.value());return null;}}private String extractTokenFromRequest(HttpServletRequest request) {// 从请求中提取JWT此示例省略return ;}private boolean isValidJwt(String token) {// JWT验证逻辑此示例省略return true;}Overridepublic String filterType() {return pre;}Overridepublic int filterOrder() {return 2;} } 3流量控制 1 基于请求大小的限制 Zuul可以对进入的HTTP请求的大小进行控制通过设置过滤器中的参数来限制请求的最大长度。这对于防止恶意用户上传大量数据或者避免因大文件上传导致的内存溢出具有重要意义。 Component public class RequestSizeFilter extends ZuulFilter {Overridepublic String filterType() {return FilterConstants.PRE_TYPE;}Overridepublic int filterOrder() {return FilterConstants.SIZE_FILTER_ORDER;}Overridepublic boolean shouldFilter() {return true;}Overridepublic Object run() {RequestContext ctx RequestContext.getCurrentContext();HttpServletRequest request ctx.getRequest();if (request.getContentLength() 5 * 1024 * 1024) { // 5MBctx.setSendZuulResponse(false);ctx.setResponseStatusCode(HttpStatus.BAD_REQUEST.value());ctx.setResponseBody(Request is too large.);ctx.set(error.status_code, HttpStatus.BAD_REQUEST.value());}return null;} } 2基于并发数的限制 Component public class ConcurrentRateLimitingFilter extends ZuulFilter {private ConcurrentHashMapString, Integer concurrentRequestsMap new ConcurrentHashMap();Overridepublic String filterType() {return FilterConstants.PRE_TYPE;}Overridepublic int filterOrder() {return FilterConstants.SERVLETDetection_FILTER_ORDER 1;}Overridepublic boolean shouldFilter() {return true;}Overridepublic Object run() {RequestContext ctx RequestContext.getCurrentContext();HttpServletRequest request ctx.getRequest();String requestURI request.getRequestURI();Integer count concurrentRequestsMap.get(requestURI);if (count null) {concurrentRequestsMap.put(requestURI, 1);} else if (count 10) { // Assuming we only allow 10 concurrent requests per URIctx.setSendZuulResponse(false);ctx.setResponseStatusCode(HttpStatus.TOO_MANY_REQUESTS.value());ctx.setResponseBody(Too many requests);ctx.set(error.status_code, HttpStatus.TOO_MANY_REQUESTS.value());} else {concurrentRequestsMap.put(requestURI, count 1);ctx.addZuulResponseHeader(X-Concurrent-Request, String.valueOf(count 1));}return null;} }
http://www.hkea.cn/news/14272482/

相关文章:

  • 宁波网站建设rswl做外贸用什么浏览国外网站
  • 网站建设 提供源码视觉传达设计主要学什么
  • 网上投资网站建设开发公众号 微网站开发
  • 定制做网站技术哈尔滨工程研究生招生信息网
  • 延吉有没有做网站的网站做权重的方法
  • 南京网站设计建设推荐外链工具软件
  • 深圳最新招聘seo综合查询站长工具怎么用
  • 有可以做国外支付系统的网站吗佛山优化网站
  • 网站跳出率高的原因聚名网备案域名
  • 旅游 便宜 网站建设中国建设银行网站特点
  • 网站的排版问题一个人看片免费高清
  • 太原智能化营销网站制作公司软件定制公司官网
  • 用ps做网站方法做网站 模板
  • 网站 网络推广天津网站建设 阿土伯
  • 网站建设费用如何列支东莞网络推广平
  • 手机上上建设网站天河企业网站建设
  • 锚文本外链网站光棍天堂手机2019版免费观看
  • 网站关键词设置技巧重庆网站推广平台
  • 网站建设教程(项目式)郑州企业的网站建设
  • 主机怎么装wordpress企业网站优化包括哪三个方面
  • 网站创造网页建站价格
  • 手机做wifi中继上外国网站积分商城平台
  • 北京网站制作公司排名做网站商城如何优化
  • 网站主页设计教程网站建设有什么价值
  • 河北住房和建设厅官方网站制作公司网站 黑龙江
  • 纺织行业网站怎么做吸引人建站公司 知乎 discuz
  • 中山家居企业网站建设wordpress 首页调用产品
  • 广州营销型企业网站建设网站建设先修课程
  • 怎么把asp网站改成php用搬瓦工做网站
  • php网站后台密码忘记了wordpress文章图片幻灯片