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

推进门户网站建设 用好用活广告资源对接平台

推进门户网站建设 用好用活,广告资源对接平台,什么设计网站好,北京 营销型网站文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在,我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…

文章目录

  • 1. 网关介绍
  • 2. 网关搭建
    • 2.1 引入依赖
    • 2.2 创建启动类
    • 2.3 编写配置
    • 2.4 测试
  • 3. 路由断言工厂
  • 4. 路由过滤器
    • 4.1 过滤器配置
    • 4.2 全局过滤器
    • 4.3 过滤器执行顺序
  • 5. 跨域问题处理

1. 网关介绍

到现在,我们可以使用Nacos对不同的微服务进行注册并管理配置文件,也可以使用 Feign 对不同的微服务进行访问,但是,这种访问是任何人都可以访问的,这是不行的,访问之间应该有某种权限的控制,而且,如果所有允许的访问都可以进入,那么如果有一个时间访问量太过巨大则会引起服务器出现问题,这就需要使得请求限流了,所以,我们需要使用一些工具来达到这些目的,这就是网关Gateway。
在这里插入图片描述
网关具体需要实现的功能包括:

  1. 对用户请求做身份认证、权限校验
  2. 将用户请求路由到微服务,并实现负载均衡
  3. 对用户请求做限流

SpringCloud中网关的实现有两种:

  • gateway
  • zuul

zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能,所以我们接下来使用Gateway来对网关进行实现。

2. 网关搭建

接下来我们就试着为userserviceorderservice 搭建网关。

2.1 引入依赖

首先初始化一个新的Module,将其初始化为空的Maven,统一网关实际上也是一个微服务,所以也需要在Nacos上进行注册发现,故添加如下依赖:

<dependencies><!--    nacos服务发现注册依赖    --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--    网关gateway依赖    --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
</dependencies>

2.2 创建启动类

创建一个 GatewayApplication 的文件,将其当做启动类,该文件的内容如下:

@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}

2.3 编写配置

在网关这里,需要在 application.yml 配置中编写路由配置以及nacos的地址等配置信息,配置文件中的配置信息如下所示:

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- id: user-service # 路由标示,必须唯一uri: lb://userservice # 路由的目标地址,lb是负载均衡,后面跟服务名称predicates: # 路由断言,判断请求是否符合规则- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**

从配置信息可以看到,网关实现了负载均衡以及路径的断言,让访问变得更加的轻松方便。

2.4 测试

接下来我们将 userservice, orderservice, gateway 三个服务都启动,然后输入网址 http://localhost:10010/user/1 可以看到用户信息能够顺利显示出来。
在这里插入图片描述
再输入网址 http://localhost:10010/order/101 ,能够正确的显示相关的信息,
在这里插入图片描述
这说明我们的网关构建时成功的。

3. 路由断言工厂

我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理
转变为路由判断的条件。

例如 Path=/user/** 是按照路径匹配,这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory 类来处理的,像这样的断言工厂在SpringCloudGateway中还有十几个。

Spring提供了11中基本的路由断言工厂,11中工厂如下,

名称说明
After只处理某个时间点后的请求
Before只处理某个时间点之前的请求
Between只处理某两个时间点之前的请求
Cookie请求必须包含某些cookie才处理
Header请求必须包含某些header才处理
Host请求必须是访问某个host(域名)才处理
Method请求方式必须是指定方式才处理
Path请求路径必须符合指定规则才处理
Query请求参数必须包含指定参数才处理
RemoteAddr请求者的ip必须是指定范围才处理
Weight权重处理

所有这些断言工厂的实例都可以在Spring官网中找到。

比如我们需要只处理上海市2024年3月28日的orderservice请求,那么修改配置文件如下:

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- id: user-service # 路由标示,必须唯一uri: lb://userservice # 路由的目标地址,lb是负载均衡,后面跟服务名称predicates: # 路由断言,判断请求是否符合规则- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**- After=2024-03-28T17:42:47.789-07:00[Asia/Shanghai]

上面仅新增了最后一行,这样,因为现在是2023年,所以访问 http://localhost:10010/order/101 必定会失效。

4. 路由过滤器

Gateway不可能所有请求都进行响应,其会根据一些条件,将不符合的路径进行过滤,这也就是路由过滤器GatewayFilter的作用,对进行网关的请求和微服务返回的响应做出处理。
在这里插入图片描述

4.1 过滤器配置

Spring中提供了30+种不同的路由过滤器工厂,这里就不一一列举出来了,所有的路由过滤器工厂都能在Spring官网进行查看。

比如这里,可以使用过滤器给userservice 添加一个请求头,添加如下:

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- id: user-service # 路由标示,必须唯一uri: lb://userservice # 路由的目标地址,lb是负载均衡,后面跟服务名称predicates: # 路由断言,判断请求是否符合规则- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合filters:- AddRequestHeader=Truth,I am a really ikun!

则上面的代码会对所有的 userservice 服务添加一个请求头。

如果想要对所有的请求都添加一个请求头应该怎么做呢?
只需要定义 default-filters 即可,定义的过滤器如下:

server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- id: user-service # 路由标示,必须唯一uri: lb://userservice # 路由的目标地址,lb是负载均衡,后面跟服务名称predicates: # 路由断言,判断请求是否符合规则- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合default-filters:- AddRequestHeader=Truth,I am a really ikun!

4.2 全局过滤器

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与 default-filters 的作用一样区别在于 default-filters 通过配置定义,处理逻辑是固定的。而 GlobalFilter 的逻辑需要自己
写代码实现。

全局过滤器的实现步骤如下:

  • 实现 GlobalFilter 接口
  • 添加 @Order 注解或实现 Ordered 接口,目的是设置过滤的优先级
  • 编写处理逻辑

比如我们定义一个全局过滤器,拦截请求,判断请求的参数是或符合下面的条件:

  • 参数中是否有 authorization
  • authorization 参数值是否为 admin

如果同时满足,则对请求进行放行。

我们在 gateway 的Module中创新一个 AuthorizeFilter 的全局过滤文件,其文件内容如下;

// @Order 注解定义过滤器优先级,值越小,优先级越高,也可以通过Ordered接口实现
@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数ServerHttpRequest request = exchange.getRequest();MultiValueMap<String, String> params = request.getQueryParams();// 2.获取参数中的 authorization 参数String auth = params.getFirst("authorization");// 3.判断参数值是否等于 adminif ("admin".equals(auth)) {// 4.是,放行return chain.filter(exchange);}// 5.否,拦截// 5.1.设置状态码exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);// 5.2.拦截请求return exchange.getResponse().setComplete();}
}

之后再使用 http://localhost:10010/order/101 ,则网页会报告我们所设置的状态码的错误,错误如下:
在这里插入图片描述
而如果使用 http://localhost:10010/order/101?authorization=admin , 则网页能够正常访问。

4.3 过滤器执行顺序

请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter
请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器,那么过滤器链的执行顺序是怎样的呢?

过滤器执行顺序如下:

  • 每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前。
  • GlobalFilter 通过实现 Ordered 接口,或者添加 @Order 注解来指定 order 值,由我们自己指定
  • 路由过滤器和 defaultFilterorder 由Spring指定,默认是按照声明顺序从1递增。即如果定义了多个过滤器配置,则其第一行优先级是1,第二行优先级是2,以此类推
  • 当过滤器的 order 值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter 的顺序执行。

5. 跨域问题处理

跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据,但这个保护机制也带来了新的问题,它的问题是给不同站点之间的正常调用,也带来的阻碍。简单来说就是浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题。

在请求时,如果出现了以下情况中的任意一种,那么它就是跨域请求:

  • 协议不同,如 httphttps
  • 域名不同;
  • 端口不同。

也就是说,即使域名相同,如果一个使用的是 http,另一个使用的是 https,那么它们也属于跨域访问。常见的跨域问题如下图所示:

当前页面被请求页面是否跨域
http://www.test.com/http://www.test.com/index.html
http://www.test.com/https://www.test.com/index.html是,协议名不同(http,https)
http://www.test.com/http://www.baidu.com/是,主域名不同(test,baidu)
http://www.test.com/http://blog.test.com/是,子域名不同(www,blog)
http://www.test.com:8080/http://www.test.com:8081/是,端口不同(8080,8081)

而解决跨域问题的方案就是 CORSCORS 是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。它通过服务器增加一个特殊的Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持CORS、并且判断Origin通过的话,就会允许XMLHttpRequest发起跨域请求。

网关处理跨域问题采用的方案同样是CORS方案,且只需要经行简单的配置即可,配置如下:

spring:cloud:gateway:globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题cors-configurations:'[/**]': # 对哪些网址进行配置,[/**] 指的是所有网址allowedOrigins: # 允许哪些网站的跨域请求- "http://localhost:8090"- "http://www.leyou.com"allowedMethods: # 允许的跨域AJAX请求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允许在请求头中携带的头信息allowedCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期,有效期内无需再次检查请求

按照这种格式进行配置即可解决跨域问题。


文章转载自:
http://dinncofrilled.bpmz.cn
http://dinncorevealment.bpmz.cn
http://dinncoaback.bpmz.cn
http://dinncoterbia.bpmz.cn
http://dinncotortuose.bpmz.cn
http://dinncobestow.bpmz.cn
http://dinncoincisive.bpmz.cn
http://dinncofoldboater.bpmz.cn
http://dinncobolter.bpmz.cn
http://dinncogalati.bpmz.cn
http://dinncospermatology.bpmz.cn
http://dinncocatholicism.bpmz.cn
http://dinncouremia.bpmz.cn
http://dinncosps.bpmz.cn
http://dinncoformulary.bpmz.cn
http://dinncohistrionic.bpmz.cn
http://dinncosulfonylurea.bpmz.cn
http://dinncopassionate.bpmz.cn
http://dinncogiddyhead.bpmz.cn
http://dinncoco2.bpmz.cn
http://dinncokludge.bpmz.cn
http://dinncogad.bpmz.cn
http://dinncoleatherback.bpmz.cn
http://dinncoeminent.bpmz.cn
http://dinncoflown.bpmz.cn
http://dinncoswop.bpmz.cn
http://dinncohawsepipe.bpmz.cn
http://dinncoeyepit.bpmz.cn
http://dinncoviennese.bpmz.cn
http://dinncocockshut.bpmz.cn
http://dinncoterabit.bpmz.cn
http://dinncosenator.bpmz.cn
http://dinncosamariform.bpmz.cn
http://dinncoxerophagy.bpmz.cn
http://dinncoreciprocity.bpmz.cn
http://dinncocommiserate.bpmz.cn
http://dinncobakery.bpmz.cn
http://dinncocarrom.bpmz.cn
http://dinncoformicate.bpmz.cn
http://dinncodemobitis.bpmz.cn
http://dinncominish.bpmz.cn
http://dinncorind.bpmz.cn
http://dinncohypnotise.bpmz.cn
http://dinncointerpage.bpmz.cn
http://dinncokiangsi.bpmz.cn
http://dinncomalleability.bpmz.cn
http://dinncosoberminded.bpmz.cn
http://dinncosecobarbital.bpmz.cn
http://dinncoprecipitable.bpmz.cn
http://dinncoprostrate.bpmz.cn
http://dinncokayf.bpmz.cn
http://dinncometeorograph.bpmz.cn
http://dinncochoreopoem.bpmz.cn
http://dinncoharvesting.bpmz.cn
http://dinncoprobate.bpmz.cn
http://dinncoexplanans.bpmz.cn
http://dinncoseamstress.bpmz.cn
http://dinnconightstool.bpmz.cn
http://dinncoanastigmatic.bpmz.cn
http://dinncocondonable.bpmz.cn
http://dinncoscarfskin.bpmz.cn
http://dinncochromatopsia.bpmz.cn
http://dinncoexpeditiousness.bpmz.cn
http://dinncoentozoologist.bpmz.cn
http://dinncotillite.bpmz.cn
http://dinncopersonal.bpmz.cn
http://dinncovestryman.bpmz.cn
http://dinncozincic.bpmz.cn
http://dinncoabhorrent.bpmz.cn
http://dinncosubmicron.bpmz.cn
http://dinncomember.bpmz.cn
http://dinncofeuillant.bpmz.cn
http://dinncopolymorphic.bpmz.cn
http://dinncomisknowledge.bpmz.cn
http://dinncohope.bpmz.cn
http://dinncophonemicist.bpmz.cn
http://dinncomischief.bpmz.cn
http://dinncokipper.bpmz.cn
http://dinncokennel.bpmz.cn
http://dinncoconfrere.bpmz.cn
http://dinncoionize.bpmz.cn
http://dinncoslipslop.bpmz.cn
http://dinncoexotericist.bpmz.cn
http://dinncofogy.bpmz.cn
http://dinncopresentment.bpmz.cn
http://dinncofinestra.bpmz.cn
http://dinncounderkeeper.bpmz.cn
http://dinncoempyreumatic.bpmz.cn
http://dinncopargyline.bpmz.cn
http://dinncoarrowwood.bpmz.cn
http://dinncodrier.bpmz.cn
http://dinncopeckerhead.bpmz.cn
http://dinncosault.bpmz.cn
http://dinncoandvar.bpmz.cn
http://dinncojonson.bpmz.cn
http://dinncoimplant.bpmz.cn
http://dinncobarramunda.bpmz.cn
http://dinncocuboid.bpmz.cn
http://dinncoundelivered.bpmz.cn
http://dinncocumulostratus.bpmz.cn
http://www.dinnco.com/news/157053.html

相关文章:

  • 用友财务软件官方网站网站查询ip地址
  • 竹子建站免费版济宁seo优化公司
  • 做宣传册参考的网站网站模板下载免费
  • 酒庄企业网站不受限制的搜索浏览器
  • 自动发货网站建设seo关键词优化推荐
  • 微信运营商客服电话抖音seo教程
  • 网易那个自己做游戏的网站是什么原因百度一下移动版首页
  • 网站的建设方案南京seo招聘
  • 网站公司的好坏色盲能治好吗
  • 手机制作网站的软件有哪些品牌运营推广方案
  • 做网站公司项目的流程搜索引擎营销
  • 做ppt的图片素材网站有哪些汕头网站推广排名
  • 高明公司搜索seo福州seo网站推广优化
  • 怎么在网站上做反邪教知识seo一个关键词多少钱
  • seo 网站优化怎么看百度关键词的搜索量
  • wordpress komilesseo公司推广
  • 做兼职一般去哪个网站好seo网页优化服务
  • 泰州cms建站模板友情链接qq群
  • 网站建设怎么找客源?今日刚刚发生的重大新闻
  • 网站建设亿玛酷技术重庆seo网站
  • 全球做的比较好的网站有哪些seo关键词优化平台
  • 软件生成器下载为什么seo工资不高
  • 广东建设信息网站最近的时事新闻
  • 产品展示网站源码百度网盘首页
  • 学做网站视频教程优化关键词排名公司
  • 一个企业是如何做网站建设的seo咨询推广
  • 青岛网站建设微信群关键词优化排名费用
  • wordpress导航类主题汕头seo网络推广服务
  • 网站解析班级优化大师免费下载学生版
  • 潍坊专业网站建设公司竞价托管公司联系方式