赞
踩
项目实战经验较浅,也没有系统的就专业知识进行汇总,今日尝试养成写博客学习的习惯。
本部分内容是初次接触《黑马头条》的0基础学习笔记。由于已经完成了腾讯云的nacos搭建内容,以及项目文档的下载,因此直接从项目架构开始介绍。
项目模块与具体功能如下:
common模块:全局异常处理的模块(详细功能描述后续补充)
feign-api模块:远程接口模块
gateway模块:网关微服务模块
model模块:表中实体类模块,例如用户表ApUser的实现、登录Dto,也包含常用的请求的响应结果实现(SUCCESS:200等字段的实现)
service魔模块:微服务相关工程实现模块,例如用户端微服务搭建(需新建模块)其微服务的标准结构如图所示
test模块:常用测试模块
utils模块:常用工具类模块
有三种方式:postman、swagger、knife4j
其中postman是软件,提供各种接口测试;
swagger是测试类,仅支持在线测试,会生成文档,需要导入依赖并添加注解
http://localhost:51801/swagger-ui.html;
knife4j是类似于swagger的一个实现,也支持离线接口文档下载
http://localhost:51801/doc.html
项目中网关的服务工程结构
由上到下分别为平台管理的网关、自媒体的网关和当前app的网关
目前实现app网关,首先导入依赖:
<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>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> </dependency> </dependencies>
由上至下分别是gateway的starter微服务依赖;nacos注册中心;nacos配置中心;jwt解析的jar包
接下来设置引导类
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class AppGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(AppGatewayApplication.class,args);
}
}
其中@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})要加括号里的内容,否则会报错
在网关模块中实现上述流程,代码如下
@Component @Slf4j //注解是被spring管理以及打印日志,重写接口Ordered和GlobalFilter中的方法 //filter:判断token是否有效 //getOrder:优先级设置,值越小,优先级越高 public class AuthorizeFilter implements Ordered, GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { //1.获取request和response对象 ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); //2.判断是否是登录 if(request.getURI().getPath().contains("/login")){ //放行 return chain.filter(exchange); } //3.获取token String token = request.getHeaders().getFirst("token"); //4.判断token是否存在 if(StringUtils.isBlank(token)){ response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); } //5.判断token是否有效 try { Claims claimsBody = AppJwtUtil.getClaimsBody(token); //是否是过期 int result = AppJwtUtil.verifyToken(claimsBody); if(result == 1 || result == 2){ response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); } }catch (Exception e){ e.printStackTrace(); response.setStatusCode(HttpStatus.UNAUTHORIZED); return response.setComplete(); } //6.放行 return chain.filter(exchange); } /** * 优先级设置 值越小 优先级越高 * @return */ @Override public int getOrder() { return 0; } }
还得再练
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。