分布式新闻项目实战 - 9.后台系统管理

news2025/5/30 13:49:31

佳能:感动常在
记得很早之前看过的一个广告:男子拿着妻子的相机发呆,父亲尝试安慰着他,然后接过相机给他拍了张照片,突然他进去了相机的世界,相机里的他一直给父亲做手势,直到父亲翻到了最后一张照片,那一张照片有他的妻子,如愿以偿,男子遇到了他去世的妻子,男子快速在手上写着什么,父亲满含泪水,把照片放大打印出来,手上写的是 Leave me…

在这里插入图片描述


系列文章目录

  1. 项目搭建
  2. App登录及网关
  3. App文章
  4. 自媒体平台(博主后台)
  5. 内容审核(自动)

文章目录

  • 系列文章目录
  • 一、需求分析
  • 二、表结构分析
    • 1. 导入数据库
    • 2. 实体类
      • ⑴. 管理员用户信息表
      • ⑵. APP实名认证信息表
  • 三、后台管理端
    • 1. 创建模块
    • 2. 引导类
    • 3. 微服务配置文件
    • 4. 日志配置文件
    • 5. Nacos
  • 四、登录
    • 1. 接口定义
      • ⑴. 接口说明
      • ⑵. Dto
    • 2. 功能实现
      • ⑴. Controller
      • ⑵. Mapper
      • ⑶. service
      • ⑷. Impl
      • ⑸. Controller
  • 五、gateway网关
    • 1. 创建模块
    • 2. 引导类
    • 3. 配置文件
    • 4. nacos配置
  • 六、测试
  • 七、nginx
    • 1. 导入nginx(这里的nginx包异常)
    • 2. 配置nginx.conf文件
    • 3. 测试




一、需求分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 登录: 用户名和密码、加盐验证
  • 敏感词管理: 游客只有查看的权限
  • 频道管理: 增删改、分页查询、模糊查询
  • 用户审核管理: 分页查询、审核失败、审核成功
  • 自媒体文章人工审核: 分页查询、文章详情、审核失败、审核成功



二、表结构分析

1. 导入数据库

sql文件链接:https://pan.baidu.com/s/1ZditX-YHPKppYt3GveFfbA?pwd=abcd
在这里插入图片描述


2. 实体类

⑴. 管理员用户信息表

新建 heima-leadnews-model\src\main\java\com\heima\model\admin\pojos\AdUser.java 文件:

/**
 * <p>
 * 管理员用户信息表
 * </p>
 * @author itheima
 */
@Data
@TableName("ad_user")
public class AdUser implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private Integer id;

    /**
     * 登录用户名
     */
    @TableField("name")
    private String name;

    /**
     * 登录密码
     */
    @TableField("password")
    private String password;

    /**
     * 盐
     */
    @TableField("salt")
    private String salt;

    /**
     * 昵称
     */
    @TableField("nickname")
    private String nickname;

    /**
     * 头像
     */
    @TableField("image")
    private String image;

    /**
     * 手机号
     */
    @TableField("phone")
    private String phone;

    /**
     * 状态
            0 暂时不可用
            1 永久不可用
            9 正常可用
     */
    @TableField("status")
    private Integer status;

    /**
     * 邮箱
     */
    @TableField("email")
    private String email;

    /**
     * 最后一次登录时间
     */
    @TableField("login_time")
    private Date loginTime;

    /**
     * 创建时间
     */
    @TableField("created_time")
    private Date createdTime;

}

⑵. APP实名认证信息表

新建 heima-leadnews-model\src\main\java\com\heima\model\admin\pojos\ApUserRealname.java 文件:

/**
 * <p>
 * APP实名认证信息表
 * </p>
 * @author itheima
 */
@Data
@TableName("ap_user_realname")
public class ApUserRealname implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 账号ID
     */
    @TableField("user_id")
    private Integer userId;

    /**
     * 用户名称
     */
    @TableField("name")
    private String name;

    /**
     * 资源名称
     */
    @TableField("idno")
    private String idno;

    /**
     * 正面照片
     */
    @TableField("font_image")
    private String fontImage;

    /**
     * 背面照片
     */
    @TableField("back_image")
    private String backImage;

    /**
     * 手持照片
     */
    @TableField("hold_image")
    private String holdImage;

    /**
     * 活体照片
     */
    @TableField("live_image")
    private String liveImage;

    /**
     * 状态
            0 创建中
            1 待审核
            2 审核失败
            9 审核通过
     */
    @TableField("status")
    private Short status;

    /**
     * 拒绝原因
     */
    @TableField("reason")
    private String reason;

    /**
     * 创建时间
     */
    @TableField("created_time")
    private Date createdTime;

    /**
     * 提交时间
     */
    @TableField("submited_time")
    private Date submitedTime;

    /**
     * 更新时间
     */
    @TableField("updated_time")
    private Date updatedTime;

}



三、后台管理端

1. 创建模块

在这里插入图片描述

2. 引导类

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\AdminApplication.java 文件:

@SpringBootApplication
@EnableDiscoveryClient // 集成当前的注册中心
@MapperScan("com.heima.admin.mapper") // 集成myBatisPlus 扫描mapper
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }
}

3. 微服务配置文件

新建 heima-leadnews-service\heima-leadnews-admin\src\main\resources\bootstrap.yml 文件:

server:
  port: 51809
spring:
  application:
    name: leadnews-admin
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.130:8848
      config:
        server-addr: 192.168.200.130:8848
        file-extension: yml

4. 日志配置文件

新建 heima-leadnews-service\heima-leadnews-admin\src\main\resources\logback.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <!--定义日志文件的存储地址,使用绝对路径-->
    <property name="LOG_HOME" value="d:/logs"/>

    <!-- Console 输出设置 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/leadnews.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 异步输出 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="FILE"/>
    </appender>


    <logger name="org.apache.ibatis.cache.decorators.LoggingCache" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>
    <logger name="org.springframework.boot" level="debug"/>
    <root level="info">
        <!--<appender-ref ref="ASYNC"/>-->
        <appender-ref ref="FILE"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

5. Nacos

新建 leadnews-admin 配置:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/leadnews_admin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
# 设置Mapper接口所对应的XML文件位置,如果你在Mapper接口中有自定义方法,需要进行该配置
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  # 设置别名包扫描路径,通过该属性可以给包中的类注册别名
  type-aliases-package: com.heima.model.admin.pojos




四、登录

1. 接口定义

⑴. 接口说明

接口地址:/login/in
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:
请求示例:

{
	"name": "",
	"password": ""
}

请求参数:

参数名称参数说明in是否必须数据类型schema
dtodtobodytrueAdUserDtoAdUserDto
  nametruestring
  passwordtruestring

响应状态:

状态码说明schema
200OKResponseResult
201Created
401Unauthorized
403Forbidden
404Not Found

响应参数:

参数名称参数说明类型schema
codeinteger(int32)integer(int32)
dataobject
errorMessagestring
hoststring

响应示例:

{
    "host":null,
    "code":1002,
    "errorMessage":"数据不存在",
    "data":null
}
{
    "host":null,
    "code":2,
    "errorMessage":"密码错误",
    "data":null
}

{
    "host":null,
    "code":200,
    "errorMessage":"操作成功",
    "data":{
        "user":{
            "id":"3",
            "name":"guest",
            "password":"",
            "salt":"",
            "nickname":"gu",
            "image":null,
            "phone":"13412345676",
            "status":1,
            "email":"guest@qq.com",
            "loginTime":1596092403000,
            "createdTime":1596092406000
        },
        "token":"..."
    }
}

⑵. Dto

新建 heima-leadnews-model\src\main\java\com\heima\model\admin\dtos\AdLoginDto.java 文件:

@Data
public class AdLoginDto {

    /**
     * 用户名
     */
    private String name;

    /**
     * 密码
     */
    private String password;
}

2. 功能实现

⑴. Controller

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\controller\v1\LoginController.java 文件:

@RestController
@RequestMapping("/api/v1/admin/login")
public class LoginController {

    @PostMapping("/in")
    public ResponseResult login(@RequestBody AdLoginDto adLoginDto) {
        return null;
    }
}

⑵. Mapper

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\mapper\AdUserMapper.java 文件:

public interface AdUserMapper extends BaseMapper<AdUser> {
}

⑶. service

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\service\AdUserService.java 文件:

public interface AdUserService {

    /**
     * 后台系统登录
     * @param adminLoginDto
     * @return
     */
    public ResponseResult login(AdLoginDto adminLoginDto);
}

⑷. Impl

新建 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\service\impl\AdUserServiceImpl.java 文件:

@Service
@Slf4j
public class AdUserServiceImpl extends ServiceImpl<AdUserMapper, AdUser> implements AdUserService {

    /**
     * 后台系统登录
     * @param dto
     * @return
     */
    @Override
    public ResponseResult login(AdLoginDto dto) {
        //1.检查参数
        if (StringUtils.isBlank(dto.getName()) || StringUtils.isBlank(dto.getPassword())) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "用户名或密码为空");
        }

        //2.查询用户
        AdUser adUser = getOne(Wrappers.<AdUser>lambdaQuery().eq(AdUser::getName, dto.getName()));
        if (adUser == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
        }

        //3.比对密码
        String salt = adUser.getSalt();
        String pswd = dto.getPassword();
        pswd = DigestUtils.md5DigestAsHex((pswd + salt).getBytes());
        if (pswd.equals(adUser.getPassword())) {
            //4.返回数据  jwt
            Map<String, Object> map = new HashMap<>();
            map.put("token", AppJwtUtil.getToken(adUser.getId().longValue()));
            adUser.setSalt("");
            adUser.setPassword("");
            map.put("user", adUser);
            return ResponseResult.okResult(map);

        } else {
            return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
        }
    }
}

⑸. Controller

编辑 heima-leadnews-service\heima-leadnews-admin\src\main\java\com\heima\admin\controller\v1\LoginController.java 文件:

@RestController
@RequestMapping("/api/v1/admin/login")
public class LoginController {

    @Autowired
    private AdUserService adUserService;

    @PostMapping("/in")
    public ResponseResult login(@RequestBody AdLoginDto adLoginDto) {
        return adUserService.login(adLoginDto);
    }
}



五、gateway网关

1. 创建模块

  • heima-leadnews-gateway 网关
    • heima-leadnews-admin-gateway 系统管理平台
    • heima-leadnews-wemedia-gateway 用户自媒体平台
    • heima-leadnews-app-gateway 用户移动APP
      在这里插入图片描述

2. 引导类

新建 heima-leadnews-gateway\heima-leadnews-admin-gateway\src\main\java\com\heima\admin\gateway\AdminGatewayApplication.java 文件:

@SpringBootApplication
@EnableDiscoveryClient
public class AdminGatewayApplication {

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

3. 配置文件

新建 heima-leadnews-gateway\heima-leadnews-admin-gateway\src\main\resources\bootstrap.yml 文件:

server:
  port: 51603
spring:
  application:
    name: leadnews-admin-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.200.130:8848
      config:
        server-addr: 192.168.200.130:8848
        file-extension: yml

4. nacos配置

nocos地址: http://192.168.200.130:8848/nacos
新建 leadnews-admin-gateway 配置:

spring:
  cloud:
    gateway:
      globalcors:
        add-to-simple-url-handler-mapping: true
        cors-configurations:
          '[/**]': # 匹配所有请求
            allowedOrigins: "*" #跨域处理 允许所有的域
            allowedMethods: # 支持的方法
              - GET
              - POST
              - PUT
              - DELETE
              - OPTION
      routes:
        # 平台管理
        - id: service_6001
          uri: lb://leadnews-admin
          predicates:
            - Path=/service_6001/**
          filters:
            - StripPrefix= 1




六、测试

启动项目网关和后台微服务两个服务,使用postman进行测试

网关后的请求地址: http://localhost:51809/api/v1/admin/login/in
在这里插入图片描述




七、nginx

1. 导入nginx(这里的nginx包异常)

资源链接: https://pan.baidu.com/s/1R7akEh2ceQNH8CL2pwV-uA?pwd=abcd

解压至 nginx 目录下(同自媒体端nginx)


2. 配置nginx.conf文件

(nginx包中)新建 D:\code\hm\leadnews\config\nginx-1.18.0\conf\leadnews.conf\heima-leadnews-admin.conf 文件:

upstream  heima-admin-gateway{
    server localhost:51603;
}

server {
	listen 8803;
	location / {
		root D:/code/hm/leadnews/config/admin-web/;
		index index.html;
	}
	
	location ~/service_6001/(.*) {
		proxy_pass http://heima-admin-gateway/$1;
		proxy_set_header HOST $host;  # 不改变源请求头的值
		proxy_pass_request_body on;  #开启获取请求体
		proxy_pass_request_headers on;  #开启获取请求头
		proxy_set_header X-Real-IP $remote_addr;   # 记录真实发出请求的客户端IP
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #记录代理信息
	}
}

3. 测试

启动nginx,启动后台微服务和后台网关,后台系统地址: http://localhost:8803/#/login
在这里插入图片描述



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库02——SQL基本语言组成和数据类型

接着上一章的内容&#xff0c;上一章安装好了Mysql和对应的编译器workbench&#xff0c;并且简单的创造了一个数据库college&#xff0c;这一章我们学习SQL语言的一些基础。 首先了解一下基础。 Sql语言组成 sql 的一些基本定义语句的的用法。 操作对象 语句 功能 表 CRE…

leetcode 困难 —— N 皇后(简单递归)

&#xff08;不知道为啥总是给这种简单的递归设为困难题&#xff0c;虽然优化部分很不错&#xff0c;但是题目太好过了&#xff09; 题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个…

2023年信息与通信工程国际会议(JCICE 2023)

2023年信息与通信工程国际会议(JCICE 2023) 重要信息 会议网址&#xff1a;www.jcice.org 会议时间&#xff1a;2023年3月17-19日 召开地点&#xff1a;成都 截稿时间&#xff1a;2023年2月10日 录用通知&#xff1a;投稿后2周内 收录检索&#xff1a;EI,Scopus 会议简介…

干货 | 机器人的运动规划方法和应用现状

“如今&#xff0c;机器人正在更深入的服务于人类&#xff0c;它们要想完成的一些力所能及的操作&#xff0c;都需要依托于机器人的运动规划。本期技术干货&#xff0c;我们邀请到了小米工程师——‍孙国康&#xff0c;向我们介绍机器人的运动规划方法和应用现状。”一、前言近…

C++ 浅谈之 STL Deque

C 浅谈之 STL Deque HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是 C 浅谈系列&#xff0c;收录在专栏 C 语言中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些 C 语言重要的语法特性 &#x1f3c3;&a…

舆情监测方案怎么写,TOOM舆情监测系统解决方案

舆情监测是通过网络和媒体来收集、分析、评估和报告关于某一特定话题或组织的舆论动态的过程。舆情监测方案通常包括数据收集、数据分析、报告生成等步骤&#xff0c;以帮助组织了解公众对其的看法和声音&#xff0c;并以此作出相应的决策和行动&#xff0c;舆情监测方案怎么写…

车道线检测-Eigenlanes 论文学习笔记

论文&#xff1a;《Eigenlanes: Data-Driven Lane Descriptors for Structurally Diverse Lanes》 代码&#xff1a;https://github.com/dongkwonjin/Eigenlanes 核心&#xff1a;在 Eigenlane Space 中检测车道线 创新点 Eigenlane&#xff1a;数据驱动的车道描述符&#xff…

Python中__init__.py文件深入理解

Python中文件__init__.py深入理解1. 简介1.1 模块&#xff08;Module&#xff09;和包&#xff08;Package&#xff09;的概念1.2 __init__.py文件简介2. __init__.py内容写法2.1 __init__.py文件内容2.2 __init__.py内容解释1. 简介 1.1 模块&#xff08;Module&#xff09;和…

这是从零在独自开开发,将是副业赚钱最好的平台!

文章目录最重要的事情放前面1.前言2.简单介绍一下3.【独自开】介绍3.1 分层标准化平台架构3.2 集成第三方数字接口3.3 支持各个行业的系统定制开发4.如何在【独自开】赚钱获取收益?4.1 如何称为【独自开】开发者?最重要的事情放前面 通过平台的审核也可以得到相应的奖金&…

信息系统建设和服务能力等级证书(CS)

2019年11月26日&#xff0c;中国电子信息行业联合会发布了《信息系统建设和服务 能力评估体系 能力要求》&#xff08;简称《能力要求》&#xff09;。《能力要求》是我国信息系统建设和服务能力领域的首个团体标准&#xff0c;旨在通过该标准的实施提升信息系统建设和服务行业…

Linux学习之冯诺依曼体系结构

目录冯诺伊曼结构体系基本概念冯诺依曼结构分为五个部分组成冯诺依曼结构体系的各部分的读写特点&#xff1a;从软件数据上认识冯诺依曼结构体系冯诺伊曼结构体系 基本概念 数学家冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑、程序存储执行以及计算机…

JVM相关面试题

文章目录说一下 JVM 的主要组成部分及其作用&#xff1f;说一下 JVM 运行时数据区 &#xff1f;JVM中哪些是线程共享区 &#xff1f;说一下堆栈的区别&#xff1f;队列和栈是什么&#xff1f;有什么区别&#xff1f;简述Java类加载机制?说一下类装载的执行过程&#xff1f;什么…

类的 6 个默认成员函数

文章目录一、构造函数1. 构造函数的定义2. 编译器生成的构造函数3. 默认构造函数4. 初始化列表5. 内置成员变量指定缺省值(C11)二、析构函数1. 析构函数的定义2. 编译器生成的析构函数3. 自己写的析构函数的执行方式三、拷贝构造函数1. C语言值传递和返回值时存在 bug2. 拷贝构…

2023上半年软考中级报名-系统集成项目管理工程师

系统集成项目管理工程师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职…

【Hello Linux】 Linux基础命令(持续更新中)

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍Linux的基础命令 Linux基础命令ls指令lsls -als -dls -ils -sls -lls -nls -Fls -rls -tls -Rls -1总结思维导图pwd指令whoami指令…

已解决:pywintypes.com_error: (-2147221005, ‘无效的类字符串‘, None, None)

今天接到一个需求&#xff0c;就是读取doc文件&#xff0c; 注意是doc! doc! doc&#xff0c; 不是docx! 不是docx! 不是docx! 以下的博客都是挂羊头&#xff0c;卖狗肉 但是好多博客都是读取docx&#xff0c;以次来博取流量与眼球&#xff0c;还有好多我都用不了&#xff0…

做产品时有哪些常见的错误认知?

作为产品新人最容易遗漏的就是一些小的细节&#xff0c;有时候可能脑子里想过&#xff0c;可因为事情繁冗又遗漏了某些环节&#xff0c;导致项目不顺利。 产品经理就像是全托幼儿园的唯一一个老师&#xff0c;想要做的好就要管的多且全面&#xff0c;将自己的位置放的低一点多…

centos7环境安装单机版MinIo后台自启动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录MinIo简介一、搭建MinIo1. Linux服务器执行命令&#xff0c;查看当前系统2. 执行对应版本的minIo下载命令3. 下载完毕&#xff0c;执行启动服务命令4. minIo 启动成功…

08讲 | 基于STM32单片机NBIOT定位实战项目

前言 绘制基于 STM32 单片机的 NBIOT 实战开发板。 文章目录前言一、原理图1、绘制1&#xff09;电源供电a、USB 转 TTL 电路b、锂电池充电管理电路c、3.3V电压转换电路d、一键开关机电路2&#xff09;单片机最小系统3&#xff09;ADC电压转换电路4&#xff09;NBIOT 模组串口电…

Resin内存马逆袭之路

前言 故事还是要从很久很久以前说起&#xff0c;红蓝对抗越来越激烈&#xff0c;常见的免杀Webshell文件已经逃脱不了蓝队大佬的火眼金睛了&#xff0c;函数混淆的花里胡哨最后还是能被轻松分析&#xff0c;所以早在很多年前&#xff0c;就已经进入了内存马的时代&#xff0c;…