系列文章目录

1. 项目介绍及环境配置
2. 短信验证码登录
3. 用户信息
4. MongoDB
5. 推荐好友列表/MongoDB集群/动态发布与查看
6. 圈子动态/圈子互动
7. 即时通讯(基于第三方API)
8. 附近的人(百度地图APi)
9. 小视频
10.网关配置
11.后台管理


文章目录

  • 系列文章目录
  • 一、 问题分析
  • 二、 搭建网关工程
    • 1. 创建工程
    • 2. 导入依赖
    • 3. 配置引导类
    • 4. 添加配置文件
    • 5. 跨域支持
    • 6. 测试
  • 三、 统一鉴权
    • 1. 添加配置文件
    • 2. 自定义过滤器
    • 3. Postman
  • 四. 配置中心
    • 1. 添加bootstrap.yml配置
    • 2. 所有 bootstrap 配置

一、 问题分析

针对客户端API层,需要配置集群保证高可用,使用API网关解决以下问题:

  • 客户端直接访问应用集群
  • 访问集群需要兼顾负载均衡和容错
  • 多WEB层进行路由转发,统一的拦截过滤处理

API网关 有很多实现方式,我们通过SpringCloud Gateway实现,使用Nacos作为配置中心

二、 搭建网关工程

1. 创建工程

根目录新建 tanhua-gateway 文件:

2. 导入依赖

新建 tanhua-gateway/pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>tanhua</artifactId><groupId>com.itheima</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>tanhua-gateway</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 监控检查--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- nacos配置中心依赖支持 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.itheima</groupId><artifactId>tanhua-commons</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

3. 配置引导类

新建 tanhua-gateway/src/main/java/com/tanhua/gateway/GatewayApplication.java 文件:

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

4. 添加配置文件

新建 tanhua-gateway/src/main/resources/application.yml 文件:

server:port: 8888
spring:profiles:active: prodapplication:name: tanhua-gatewaycloud:# 配置注册中心nacos:discovery:server-addr: 192.168.136.160:8848gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:'[/**]':allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTION# 配置路由routes:# 探花系统- id: tanhua-app-serveruri: lb://tanhua-app-serverpredicates:- Path=/app/**filters:- StripPrefix= 1# 后台系统- id: tanhua-adminuri: lb://tanhua-adminpredicates:- Path=/admin/**filters:- StripPrefix= 1

5. 跨域支持

新建 tanhua-gateway/src/main/java/com/tanhua/gateway/config/CorsConfig.java 文件:

/*** 跨域支持*/
@Configuration
public class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSource source =new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

6. 测试

三、 统一鉴权

1. 添加配置文件

编辑 tanhua-gateway/src/main/resources/application.yml 文件:

server:port: 8888
spring:profiles:active: prodapplication:name: tanhua-gatewaycloud:# 配置注册中心nacos:discovery:server-addr: 192.168.136.160:8848gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:'[/**]':allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTION# 配置路由routes:# 探花系统- id: tanhua-app-serveruri: lb://tanhua-app-serverpredicates:- Path=/app/**filters:- StripPrefix= 1# 后台系统- id: tanhua-adminuri: lb://tanhua-adminpredicates:- Path=/admin/**filters:- StripPrefix= 1
gateway:excludedUrls: /user/login,/user/loginVerification,/system/users/verification,/system/users/login

2. 自定义过滤器

新建 tanhua-gateway/src/main/java/com/tanhua/gateway/filters/AuthFilter.java 文件:

@Component
public class AuthFilter implements GlobalFilter, Ordered {@Value("${gateway.excludedUrls}")private List<String> excludedUrls; //需要配置不校验的连接//过滤器核心业务代码public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//1、排除不需要权限检验的连接String path = exchange.getRequest().getURI().getPath(); //当前请求连接if(excludedUrls.contains(path)) {return chain.filter(exchange);}//2、获取token并校验 (xxxxxx , Bearer xxxxx)String token = exchange.getRequest().getHeaders().getFirst("Authorization");if(!StringUtils.isEmpty(token)) {token = token.replaceAll("Bearer ","");}boolean verifyToken = JwtUtils.verifyToken(token);//3、如果检验失败,相应错误状态:401if(!verifyToken) {Map<String, Object> responseData = new HashMap<>();responseData.put("errCode", 401);responseData.put("errMessage", "用户未登录");return responseError(exchange.getResponse(),responseData);}return chain.filter(exchange);}//响应错误数据private Mono<Void> responseError(ServerHttpResponse response, Map<String, Object> responseData){// 将信息转换为 JSONObjectMapper objectMapper = new ObjectMapper();byte[] data = new byte[0];try {data = objectMapper.writeValueAsBytes(responseData);} catch (JsonProcessingException e) {e.printStackTrace();}// 输出错误信息到页面DataBuffer buffer = response.bufferFactory().wrap(data);response.setStatusCode(HttpStatus.UNAUTHORIZED);response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");return response.writeWith(Mono.just(buffer));}//配置执行顺序public int getOrder() {return Ordered.LOWEST_PRECEDENCE;}
}

3. Postman

四. 配置中心

Nacos提供了注册中心和配置管理的能力,使用Nacos可以快速实现服务发现、服务配置管理等需求

1. 添加bootstrap.yml配置

!!! 删除 application.yml 文件
新建 tanhua-gateway/src/main/resources/bootstrap.yml 文件:

spring:profiles:# active: prodactive: devapplication:name: tanhua-gatewaycloud:nacos:discovery:server-addr: 192.168.136.160:8848config:server-addr: 192.168.136.160:8848file-extension: yml

2. 所有 bootstrap 配置


Gitee仓库地址(所有 bootstrap 配置): https://gitee.com/yuan0_0/tanhua_bootstrap.git

SpringBoot交友APP项目实战(详细介绍+案例源码) - 10.网关配置相关推荐

  1. SpringBoot交友APP项目实战(详细介绍+案例源码) - 9.小视频(SpringCache缓存)

    有人相爱,有人跳海 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4. MongoDB 5. 推荐好友列表/MongoDB集群/动态发布与查看 6. 圈子动态/圈子互动 ...

  2. SpringBoot交友APP项目实战(详细介绍+案例源码) - 7.即时通讯(基于第三方API)

    陌上花开,可缓缓归矣 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4. MongoDB 5. 推荐好友列表/MongoDB集群/动态发布与查看 6. 圈子动态/圈子互 ...

  3. Dobbo微服务项目实战(详细介绍+案例源码) - 4.MongoDB

    安能摧眉折腰事权贵,使我不得开心颜 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4.MongoDB 5. 推荐好友列表/MongoDB集群/动态发布与查看 6. 圈子 ...

  4. Dobbo微服务项目实战(详细介绍+案例源码) - 3.用户信息

    想出去旅游,想出去玩,想大吃大喝 0_o 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4. MongoDB 5. 推荐好友列表/MongoDB集群/动态发布与查看 6 ...

  5. Dobbo微服务项目实战(详细介绍+案例源码) - 5.推荐好友列表/MongoDB集群/动态发布与查看

    You are a wizard, Harry! 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4. MongoDB 5.推荐好友列表/MongoDB集群/动态发布与查 ...

  6. SpringBoot+SpringCloud+Mybatis+Vue 电商项目实战,附视频+源码+文档,包含所有主流技术栈。...

    大家好,我是树哥. 今天给大家分享一个电商项目--- 畅购商城.项目采用前后端分离的技术架构. 采用SpringBoot+SpringCloud+Mybatis+Vue为主要技术栈,包括了大型商城的主 ...

  7. SpringBoot+SpringCloud+Mybatis+Vue电商项目实战,附视频+源码+文档,包含所有主流技术栈...

    今天给大家分享一个电商项目--- 畅购商城.项目采用前后端分离的技术架构. 采用SpringBoot+SpringCloud+Mybatis+Vue为主要技术栈,包括了大型商城的主要功能.难点功能以及 ...

  8. android从入门到精通-项目实战(心得及源码)

    个人心得 这个周的时间,我用了三天的时间跟着书籍上面的内容实现了,家庭理财通这个小的app,算是用来练手的开始.首先开始实现的时候,我是先从项目的架构开始,首先你的先理解者这个APP具体是干什么的,有 ...

  9. 仿小米运动的蓝牙开源项目(附详细实现说明+源码)

    托瓦兹 莱纳斯 是一个天才. 这个项目主要以蓝牙和自己diy的手环连接,可以记录测试数据,绘制成折线坐标图之类的功能. 项目结构很简单 6个类,其中AcceptThread,ConnectedThre ...

最新文章

  1. memcached图形界面的监控
  2. 用双注意力模块来做语义分割
  3. Python列表的常用你操
  4. 浅析Java的“克隆”方法[zt]
  5. linux 无法访问docker mysql8_Apple M1芯片不支持Docker?Docker:正在努力适配
  6. 抽象类和接口的关系之我的图解(转自Jack Fan)
  7. asp.net core 使用 signalR(一)
  8. 现在很多单位有用计算机,为什么到了现在,还有很多的单位在用着xp系统?
  9. basler相机的触发线是那两脚_探究机器视觉领域线扫相机和面阵相机的区别
  10. Exchange2010批量建用户及通讯地址簿更新
  11. Google PAI资料整理及实现
  12. 一步步学习java后台(一)(IDEA, Spring, Maven, MyBatis)
  13. 5分钟学完《梁宁产品思维30讲》
  14. this.setState修改某一对象的某个属性值,其它保留不变
  15. linux系统安全应急响应
  16. 大连商务英语学校百家外语国际部商务英语与普通英语的不同之处
  17. 调用wireshark(二):调用协议解析器
  18. 计算机的音乐数字要全是数字,数字中的音乐
  19. NBA球队中英文名对照大全附带各个球队的LOGO手机壁纸
  20. Cisco Zone Base FireWall介绍及配置

热门文章

  1. 北极光到底有多美?去冰岛看过才知道
  2. 1897: 985的红绿灯难题
  3. 7-9 Wifi密码(JAVA)
  4. 基于阿里云物联网的无人值守远程农业智慧盒DIY之(二)太阳能-蓄电池板的树莓派供电系统。
  5. Db2数据库中常见的堵塞问题分析与处理方法
  6. axios 拦截器封装
  7. 05 DMVPN动态多点
  8. 外部供电不稳定时准确测量ADC电压基于STM32L151最新HAL库实现方案
  9. 【AutoMapper官方文档】DTO与Domin Model相互转换(下)
  10. 霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理