当前位置:   article > 正文

第一章 《黑马点评》项目学习1:项目搭建与登录实现_黑马点评模块实现

黑马点评模块实现

系列文章目录



前言

项目实战经验较浅,也没有系统的就专业知识进行汇总,今日尝试养成写博客学习的习惯。
本部分内容是初次接触《黑马头条》的0基础学习笔记。由于已经完成了腾讯云的nacos搭建内容,以及项目文档的下载,因此直接从项目架构开始介绍。


一、项目结构

在这里插入图片描述
项目模块与具体功能如下:
common模块:全局异常处理的模块(详细功能描述后续补充)
feign-api模块:远程接口模块
gateway模块:网关微服务模块
model模块:表中实体类模块,例如用户表ApUser的实现、登录Dto,也包含常用的请求的响应结果实现(SUCCESS:200等字段的实现)
service魔模块:微服务相关工程实现模块,例如用户端微服务搭建(需新建模块)其微服务的标准结构如图所示
test模块:常用测试模块
utils模块:常用工具类模块

二、APP实现

1.接口测试工具

有三种方式:postman、swagger、knife4j
其中postman是软件,提供各种接口测试;

swagger是测试类,仅支持在线测试,会生成文档,需要导入依赖并添加注解
http://localhost:51801/swagger-ui.html;

knife4j是类似于swagger的一个实现,也支持离线接口文档下载
http://localhost:51801/doc.html

2.网关校验jwt

项目中网关的服务工程结构
在这里插入图片描述

由上到下分别为平台管理的网关、自媒体的网关和当前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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

由上至下分别是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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

其中@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})要加括号里的内容,否则会报错

3.全局过滤器实现jwt校验

在这里插入图片描述
在网关模块中实现上述流程,代码如下

@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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

总结

还得再练

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/693051
推荐阅读
相关标签
  

闽ICP备14008679号