网关作用和功能:
1. 身份认证和权限校验
2. 服务路由、负载均衡
3. 请求限流
技术实现:
1. 阻塞式编程:SpringCloudGateway
2. Spring5响应式编程的实现:SpringCloudGateway
快速入门:
1. 搭建网关服务的步骤:
- 使用SpringCloudGateway和Nacos搭建网关服务
- 编写启动类
2. 编写路由配置及nacos地址:
- 在配置文件中添加路由配置及nacos地址
3. 测试:通过网关访问用户模块的接口:
- 通过网关访问用户模块的接口,查看控制台输出结果
路由断言工厂:
1. predicates:PredicateFactoryorg.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory
2. Predicate:用于匹配请求路径的断言工厂
路由的过滤器配置(GatewayFilterFactory):
1. 过滤器作用:添加请求头,只对当前路由的请求生效
2. 38种不同的路由过滤器工厂:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
3. 添加一个请求头:修改user service中的接口,使用网关访问对应接口,查看控制台输出结果
4. 默认过滤器:所有的路由都生效,值为default
5. 全局过滤器GlobalFilter:GatewayFilterGatewayFilterGlobalFilterGlobalFilter
6. 案例:定义全局过滤器,拦截并判断用户身份。需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:参数中是否有authorization,authorization参数值是否为admin。如果同时满足则放行,否则拦截。重启网关,测试接口。
7. 过滤器链执行顺序:order值越小,优先级越高,执行顺序越靠前。使用@Order注解来指定order值。路由过滤器defaultFilter默认是按照声明顺序从1递增。defaultFilter >路由过滤器>GlobalFilter。
8. 网关的cors跨域配置:域名不同、域名相同、端口不同。禁止请求的发起者与服务端发生跨域ajax请求CORS。
网关处理跨域采用的同样是CORS方案,并且只需要简单配置即可实现:
首先,我们来看一下具体的操作步骤:
前端代码进行跨域请求
在前端代码中,我们需要使用Ajax或者Fetch等方法进行跨域请求。这通常需要在发起请求的头部添加一些特殊的字段,比如"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"等,以表明我们希望进行跨域请求。
例如,以下是一个使用JavaScript进行跨域请求的例子: markdown Copy code ``` javascript fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Origin': 'http://localhost:8080',
'Access-Control-Request-Method': 'GET',
'Access-Control-Allow-Origin': '*'
},
}).then(response => response.json()) .then(data => console.log(data)); ``` 这里的关键是在请求头部设置了"Access-Control-Allow-Origin": "*",表示允许任何源进行跨域请求。但在生产环境中,建议明确指定允许的源,以提高安全性。
配置yml文件跨域请求
在Spring Boot中,我们可以通过修改application.yml文件来配置跨域请求。例如: markdown Copy code ``` yml server: port: 8080 cross-origin: allowed-origins: '*' #允许所有源访问allowed-methods: ['PUT', 'POST'] #允许的HTTP方法allowed-headers: ['*'] #允许的HTTP头``` 这里的关键是在server.cross-origin部分配置allowed-origins为"*",表示允许所有源进行跨域请求。但在生产环境中,建议明确指定允许的源,以提高安全性。
访问对应接口,拿到数据
完成以上配置后,我们就可以直接通过浏览器或者Postman等工具访问我们的接口了。当我们发送请求时,网关节点会检查我们的请求是否满足CORS的要求,如果满足的话,就会返回我们请求的数据。