山西网站seo,网站标题关键优化,防红域名生成,seo友情链接是什么网关的作用: 对用户请求做身份认证、权限校验 将用户请求路由到微服务#xff0c;并实现负载均衡心 对用户请求做限流 网关搭建步骤: 1.创建项目#xff0c;引入nacos服务发现和gateway依赖 2.配置application.yml#xff0c;包括服… 网关的作用: ·对用户请求做身份认证、权限校验 ·将用户请求路由到微服务并实现负载均衡心 ·对用户请求做限流 网关搭建步骤: 1.创建项目引入nacos服务发现和gateway依赖 2.配置application.yml包括服务基本信息、nacos地址、路由 路由配置包括: 1.路由id:路由的唯一标示 2.路由目标(uri):路由的目标地址http代表固定地址lb代表根据服务名负载均衡 3.路由断言( predicates) :判断路由的规则 4.路由过滤器( filters) :对请求或响应做处理 PredicateFactory的作用是什么? 读取用户定义的断言条件对请求做出判断 Path/user/**是什么含义? 路径是以/user开头的就认为是符合的 过滤器的作用是什么? 1、对路由的请求或响应做加工处理比如添加请求头 2、配置在路由下的过滤器只对当前路由的请求生效 defaultFilters的作用是什么? 对所有路由都生效的过滤器 全局过滤器的作用是什么? 对所有路由都生效的过滤器并且可以自定义处理逻辑 实现全局过滤器的步骤? 1、实现GlobalFilter接口 2、添加Order注解或实现Ordered接口 3、写处理逻辑 路由过滤器、defaultFilter、全局过滤器的执行顺序? 1、order值越小优先级越高 2、当order值一样时顺序是defaultFilter最先然后是局部的路由过滤器最后是全局过滤器 CORS跨域要配置的参数包括哪几个? 1、允许哪些域名跨域? 2、允许哪些请求头? 3、允许哪些请求方式? 4、是否允许使用cookie? 5、有效期是多久? 目录
搭建网关服务的步骤:
1、创建新的module引入SpringCloudGateway的依赖和nacos的服务发现依赖:
2、编写路由配置及nacos地址
网关路由可以配置的内容包括:
给所有进入userservice的请求添加一个请求头
给所有服务加请求头
全局过滤器GlobalFilter
过滤器执行顺序
跨域问题处理 搭建网关服务的步骤:
1、创建新的module引入SpringCloudGateway的依赖和nacos的服务发现依赖:
创建一个新的模块 在gateway的pom文件引入SpringCloudGateway的依赖和nacos的服务发现依赖 !--服务发现依赖--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency
!--网关依赖--
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId
/dependency?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdcloud-demo/artifactIdgroupIdcn.itcast.demo/groupIdversion1.0/version/parentmodelVersion4.0.0/modelVersionartifactIdgateway/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependencies!--服务发现依赖--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!--网关依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency/dependencies/project 在gateway中创建一个启动类 package cn.itcast.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}2、编写路由配置及nacos地址 server: port: 10010 #网关端口 spring: application: name: gateway #服务名称 cloud : nacos: server-addr: localhost:8848 #nacos地址 gateway: routes: #网关路由配置 - id: user-service #路由id自定义只要唯一即可 # uri: http://127.0.0.1:8081 #路由的目标地址 http就是固定地址 uri: lb://userservice #路由的目标地址lb就是负载均衡后面跟服务名称 predicates: #路由断言也就是判断请求是否符合路由规则的条件 - Path/user/** #这个是按照路径匹配只要以/user/开头就符合要求 运行10010端口可以发现无论是访问order还是user都可以访问了 网关路由可以配置的内容包括: 路由id路由唯一标示 uri路由目的地支持lb和http两种 predicates路由断言判断请求是否符合要求符合则转发到路由目的地 filters路由过滤器处理请求或响应 我们在配置文件中写的断言规则只是字符串这些字符串会被Predicate Factory读取并处理转变为路由判断的条件 例如Path/user/**是按照路径匹配这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的 像这样的断言工厂在SpringCloudGateway还有十几个 Spring提供了11种基本的Predicate工程
这里我们演示After - After2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后 server:port: 10010 #网关端口
spring:application:name: gateway #服务名称cloud :nacos:server-addr: localhost:8848 #nacos地址gateway:routes: #网关路由配置- id: user-service #路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 #路由的目标地址 http就是固定地址uri: lb://userservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/user/** #这个是按照路径匹配只要以/user/开头就符合要求- id: order-service #路由id自定义只要唯一即可uri: lb://orderservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/order/** #这个是按照路径匹配只要以/user/开头就符合要求- After2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后
最后一行我们用After来限制了必须在这个时间之后才能访问。所以访问失败 这里我们改成Before - Before2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后 server:port: 10010 #网关端口
spring:application:name: gateway #服务名称cloud :nacos:server-addr: localhost:8848 #nacos地址gateway:routes: #网关路由配置- id: user-service #路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 #路由的目标地址 http就是固定地址uri: lb://userservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/user/** #这个是按照路径匹配只要以/user/开头就符合要求- id: order-service #路由id自定义只要唯一即可uri: lb://orderservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/order/** #这个是按照路径匹配只要以/user/开头就符合要求
# - After2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后- Before2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后
此时访问成功 给所有进入userservice的请求添加一个请求头
实现方式:在gateway中修改application.yml文件给userservice的路由添加过滤器: spring: cloud: gateway: routes: #网关路由配置 - id: user-service uri: lb: //userservice、 predicates: - Path/user/** filters: #过滤器 - AddRequestHeaderTruth,Itcast is freaking awesome! #添加请求头 这里我在user-service里加上
filters: - AddRequestHeaderTruth,Itcast is freaking awesome! #添加请求头
server:port: 10010 #网关端口
spring:application:name: gateway #服务名称cloud :nacos:server-addr: localhost:8848 #nacos地址gateway:routes: #网关路由配置- id: user-service #路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 #路由的目标地址 http就是固定地址uri: lb://userservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/user/** #这个是按照路径匹配只要以/user/开头就符合要求filters:- AddRequestHeaderTruth,Itcast is freaking awesome! #添加请求头- id: order-service #路由id自定义只要唯一即可uri: lb://orderservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/order/** #这个是按照路径匹配只要以/user/开头就符合要求
# - After2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后- Before2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后在user-service的controller里修改一下 GetMapping(/{id})
public User queryById(PathVariable(id) Long id,RequestHeader(value Truth,required false) String truth) {System.out.println(truth: truth);return userService.queryById(id);
}package cn.itcast.user.web;import cn.itcast.user.config.PatternProperties;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;import java.text.DateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;Slf4j
RestController
RequestMapping(/user)
//RefreshScope
public class UserController {Autowiredprivate UserService userService;// Value(${pattern.dateformat})
// //注解读取该配置
// private String dateformat;Autowiredprivate PatternProperties properties;//注入新的java类GetMapping(prop)public PatternProperties properties(){return properties;}GetMapping(now)public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));//通过该配置改变时间格式}/*** 路径 /user/110** param id 用户id* return 用户*/GetMapping(/{id}) //请求头 变量名为Truth 可以不传 public User queryById(PathVariable(id) Long id,RequestHeader(value Truth,required false) String truth) {System.out.println(truth: truth);return userService.queryById(id);}
}在网页通过端口10010请求user的服务 会看到这句请求头被打印出来证明成功 给所有服务加请求头 default-filters: #默认过滤器会对所有的路由请求都生效 - AddRequestHeaderTruth,Itcast is freakina awesome! #添加情求头 这里我把上次user-service的请求头注释掉看看能不能通过默认过滤器让所有服务默认带上请求头
server:port: 10010 #网关端口
spring:application:name: gateway #服务名称cloud :nacos:server-addr: localhost:8848 #nacos地址gateway:routes: #网关路由配置- id: user-service #路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 #路由的目标地址 http就是固定地址uri: lb://userservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/user/** #这个是按照路径匹配只要以/user/开头就符合要求
# filters:
# - AddRequestHeaderTruth,Itcast is freaking awesome! #添加请求头- id: order-service #路由id自定义只要唯一即可uri: lb://orderservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/order/** #这个是按照路径匹配只要以/user/开头就符合要求
# - After2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后- Before2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后default-filters: #默认过滤器会对所有的路由请求都生效- AddRequestHeaderTruth,Itcast is freakina awesome! #添加情求头
访问任意一个服务都能带上请求头。但要注意我没有在order-service里打印出来所以是看不到的 全局过滤器GlobalFilter 全局过滤器的作用也是处理一切进入网关的请求和微服务响应与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。 定义方式是实现GlobalFilter接口。 举例 定义全局过滤器拦截请求判断请求的参数是否满足下面条件: 1、参数中是否有authorization, 2、authorization参数值是否为admin 如果同时满足则放行否则拦截 创建一个新类AuthorizeFilter package cn.itcast.gateway;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;//Order(-1)//这是通过注解来实现的执行顺序越小优先级越高
Component
public class AuthorizeFilter implements GlobalFilter, Ordered {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数ServerHttpRequest request exchange.getRequest();MultiValueMapString,String params request.getQueryParams();//2.获取参数中的authorization参数String auth params.getFirst( authorization);//3.判断参数值是否等于adminif ( admin.equals(auth)) {//4.是放行 这步的操作是直接运行下一个过滤器的filter相当于直接通过此时的过滤器return chain.filter(exchange);}//5.否拦截// 5.1.设置状态码 未认证exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED) ;//5.2.拦截请求 这步的操作是把此时的响应结束return exchange.getResponse().setComplete();}//这是通过继承Ordered来实现的执行顺序Overridepublic int getOrder() {return -1;}
}直接访问报401 加入参数 访问成功 过滤器执行顺序 1、每一个过滤器都必须指定一个int类型的order值order值越小优先级越高执行顺序越靠前 2、GlobalFilter通过实现Ordered接口或者添加Order注解来指定order值由我们自己指定 3、路由过滤器和defaultFilter的order由Spring指定默认是按照声明顺序从1递增。 4、当过滤器的order值一样时会按照defaultFilter 路由过滤器GlobalFilter的顺序执行。 跨域问题处理 跨域:域名不一致就是跨域主要包括: 1、域名不同: www.taobao.com和www.taobao.org和www.jd.com和miaosha.jd.com 2、域名相同端口不同:localhost:8080和localhost8081 跨域问题浏览器禁止请求的发起者与服务端发生跨域ajax请求请求被浏览器拦截的问题 解决方案CORS 网关处理跨域采用的同样是CORS方案并且只需要简单配置即可实现: spring:cloud:gateway:globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:[/**]:allowedOrigins: # 允许哪些网站的跨域请求- http://localhost:8090- http://www.leyou.comallowedMethods: # 允许的跨域ajax的请求方式- GET- POST- DELETE- PUT- OPTIONSallowedHeaders: * # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期 通过网址通过ip运行前端的html在F12中会出现报错 server:port: 10010 #网关端口
spring:application:name: gateway #服务名称cloud :nacos:server-addr: localhost:8848 #nacos地址gateway:routes: #网关路由配置- id: user-service #路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 #路由的目标地址 http就是固定地址uri: lb://userservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/user/** #这个是按照路径匹配只要以/user/开头就符合要求
# filters:
# - AddRequestHeaderTruth,Itcast is freaking awesome! #添加请求头- id: order-service #路由id自定义只要唯一即可uri: lb://orderservice #路由的目标地址lb就是负载均衡后面跟服务名称predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/order/** #这个是按照路径匹配只要以/user/开头就符合要求
# - After2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后- Before2031-04-13T15:14:47.43308:00[Asia/Shanghai] #要求访问时间在这个之后default-filters: #默认过滤器会对所有的路由请求都生效- AddRequestHeaderTruth,Itcast is freakina awesome! #添加情求头globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:[/**]:allowedOrigins: # 允许哪些网站的跨域请求- http://localhost:8090- http://www.leyou.comallowedMethods: # 允许的跨域ajax的请求方式- GET- POST- DELETE- PUT- OPTIONSallowedHeaders: * # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期 再次启动该前端在F12中可以请求到数据 代码文件点击下载https://pan.baidu.com/s/10vVSJiccKxAirQYDgzZu-Q?pwd8e5w 上一篇Feign的配置和使用
下一篇Docker的安装和使用 文章转载自: http://www.morning.zlxrg.cn.gov.cn.zlxrg.cn http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn http://www.morning.2d1bl5.cn.gov.cn.2d1bl5.cn http://www.morning.xnpml.cn.gov.cn.xnpml.cn http://www.morning.yqwrj.cn.gov.cn.yqwrj.cn http://www.morning.mwns.cn.gov.cn.mwns.cn http://www.morning.qtltg.cn.gov.cn.qtltg.cn http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn http://www.morning.sypzg.cn.gov.cn.sypzg.cn http://www.morning.zyndj.cn.gov.cn.zyndj.cn http://www.morning.yxbdl.cn.gov.cn.yxbdl.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn http://www.morning.qrpdk.cn.gov.cn.qrpdk.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.bhdyr.cn.gov.cn.bhdyr.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn http://www.morning.yrmpr.cn.gov.cn.yrmpr.cn http://www.morning.pqrhb.cn.gov.cn.pqrhb.cn http://www.morning.mooncore.cn.gov.cn.mooncore.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.rfwgg.cn.gov.cn.rfwgg.cn http://www.morning.fplqh.cn.gov.cn.fplqh.cn http://www.morning.mhpkz.cn.gov.cn.mhpkz.cn http://www.morning.nqbcj.cn.gov.cn.nqbcj.cn http://www.morning.cpktd.cn.gov.cn.cpktd.cn http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn http://www.morning.kqbjy.cn.gov.cn.kqbjy.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.ykgkh.cn.gov.cn.ykgkh.cn http://www.morning.rgpbk.cn.gov.cn.rgpbk.cn http://www.morning.yjprj.cn.gov.cn.yjprj.cn http://www.morning.rnqrl.cn.gov.cn.rnqrl.cn http://www.morning.ydwsg.cn.gov.cn.ydwsg.cn http://www.morning.ctbr.cn.gov.cn.ctbr.cn http://www.morning.wwjft.cn.gov.cn.wwjft.cn http://www.morning.czrcf.cn.gov.cn.czrcf.cn http://www.morning.rnfn.cn.gov.cn.rnfn.cn http://www.morning.kyzxh.cn.gov.cn.kyzxh.cn http://www.morning.ymhjb.cn.gov.cn.ymhjb.cn http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.pggkr.cn.gov.cn.pggkr.cn http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn http://www.morning.mszwg.cn.gov.cn.mszwg.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.smj79.cn.gov.cn.smj79.cn http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com http://www.morning.twdwy.cn.gov.cn.twdwy.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.jzyfy.cn.gov.cn.jzyfy.cn http://www.morning.cfcpb.cn.gov.cn.cfcpb.cn http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn http://www.morning.lrylj.cn.gov.cn.lrylj.cn http://www.morning.qbwyd.cn.gov.cn.qbwyd.cn http://www.morning.txfzt.cn.gov.cn.txfzt.cn http://www.morning.brlcj.cn.gov.cn.brlcj.cn http://www.morning.kbyp.cn.gov.cn.kbyp.cn http://www.morning.dnjwm.cn.gov.cn.dnjwm.cn http://www.morning.qpqwd.cn.gov.cn.qpqwd.cn http://www.morning.wpjst.cn.gov.cn.wpjst.cn http://www.morning.dyxlj.cn.gov.cn.dyxlj.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.xhrws.cn.gov.cn.xhrws.cn http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn http://www.morning.ntlxg.cn.gov.cn.ntlxg.cn http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn http://www.morning.pwdrc.cn.gov.cn.pwdrc.cn http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn http://www.morning.kycwt.cn.gov.cn.kycwt.cn