当前位置: 首页 > article >正文

Jeecg-Boot 开放接口开发实战:在 Jeecg-Boot 的jeecg-system-biz中添加一个controller 实现免鉴权数据接口

Jeecg-Boot 开放接口开发实战:在 Jeecg-Boot 的jeecg-system-biz中添加一个controller 实现免鉴权数据接口

一、场景需求分析

在微服务架构中,常需要快速实现以下两类接口:

  • 开放接口:无需登录即可访问(如数据查询、状态检测)
  • 鉴权接口:需验证用户身份(如数据修改、敏感操作)
    本文将以 SimpleDemoController 为例,演示如何快速实现开放接口,并集成Swagger文档支持。

二、工程结构规范

推荐按功能模块组织代码结构:

src/main/java
└── org.jeecg.modules.system
    ├── controller      
    │   └── demo       # 按功能创建子包
    │       └── SimpleDemoController.java
    ├── config         # 配置文件目录
    └── ...

开发三原则

  1. 接口路径统一前缀 /api/模块名
  2. Controller类名以功能+Controller结尾
  3. 每个接口添加Swagger注解

三、在 IntelliJ IDEA 中创建 SimpleDemoController
步骤 1:定位目标模块

打开 Jeecg-Boot 项目
在 Project 窗口 找到 jeecg-system-biz 模块,如下:
在这里插入图片描述

步骤 2:在Controller包下新建 Controller 类

右键新建的包路径
选择 New → Java Class
输入类名 SimpleDemoController
使用快捷键 Alt+Insert 添加类注释:

/**
 * 系统演示接口
 * @author 你的名字
 * @since 2024-01-01
 */

步骤3:编写核心代码
3.1 基础接口实现
package org.jeecg.modules.system.controller;
import org.jeecg.common.api.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(tags = "系统演示接口")  
@RequestMapping("/system/api/simple")
public class SimpleDemoController {
    /**
     * 开放接口示例
     * 访问路径:/jeecg-boot/system/api/simple/demo
     */
    @GetMapping("/demo")
    @ApiOperation(value = "简单数据获取", notes = "无需参数,返回动态时间戳") 
    public Result<String> getSimpleData() {
        return Result.ok("Hello JeecgBoot! Timestamp: " + System.currentTimeMillis());
    }
}

######.2 关键注解解析

注解作用说明必填
@RestController声明为RESTful控制器✔️
@RequestMapping定义控制器基础路径✔️
@GetMapping映射GET请求✔️
@ApiSwagger模块分类✔️
@ApiOperation接口文档说明推荐

四、安全配置要点
4.1 配置免鉴权路径

application-dev.yml 中添加白名单:

shiro:
  excludeUrls:
    - /system/api/simple/demo  # 开放接口路径
    - /swagger-ui.html         # Swagger文档
    - /**/*.js                 # 静态资源
4.2 访问权限验证
  • 访问开放接口:直接调用
  • 未配置的接口:自动跳转登录页(HTTP 401)

五、接口测试方案
5.1 Swagger在线测试

访问 http://localhost:8080/jeecg-boot/doc.html
在这里插入图片描述可以看到我们刚才添加的API接口。

5.2 Postman调试
### 开放接口测试
GET {{host}}/jeecg-boot/system/api/simple/demo
Content-Type: application/json
### 错误请求测试(未配置白名单)
GET {{host}}/jeecg-boot/system/api/secure-data
5.3 前端调用示例
// Axios调用示例
axios.get('/jeecg-boot/system/api/simple/demo')
  .then(response => {
    console.log('接口返回:', response.data);
  })
  .catch(error => {
    console.error('请求异常:', error);
  });

六、高频问题排查
6.1 接口404错误
  1. 检查启动类扫描范围是否包含Controller包
  2. 确认访问路径包含上下文 /jeecg-boot
  3. 验证是否存在路径冲突
6.2 Swagger未显示接口
// 检查Swagger配置类
@Bean
public Docket createRestApi() {
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select()
        .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.system.controller")) 
        .paths(PathSelectors.any())
        .build();
}
6.3 跨域问题处理

在跨域过滤器添加配置:

config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
七、扩展开发建议
  1. 接口版本控制:路径添加版本号 /v1/api/...
  2. 请求日志记录
@AutoLog(value = "demo接口", operateType=1)
@GetMapping("/demo")
  1. 参数校验机制
public Result<?> getData(@NotBlank String id) {
    // 业务逻辑
}

结语

通过本文的实践,您已掌握Jeecg-Boot开放接口的开发全流程。建议在实际项目中:

  1. 严格管理白名单路径
  2. 生产环境关闭Swagger文档
  3. 使用HTTPS加密敏感数据传输
    扩展阅读
    Jeecg-Boot官方开发文档
    Spring Boot接口安全最佳实践

原创声明:本文为作者实战经验总结,转载请注明出处。技术交流欢迎私信或留言!


http://www.kler.cn/a/567005.html

相关文章:

  • AcWing 农夫约翰的奶酪块
  • DeepSeek引爆AI浪潮:B站如何成为科技普惠的“新课堂”?
  • Linux Mem -- 关于AArch64 MTE功能的疑问
  • 大数据与金融科技:革新金融行业的动力引擎
  • CSS Selectors
  • unity学习56:旧版legacy和新版TMP文本输入框 InputField学习
  • STM32G431RBT6——(1)芯片命名规则
  • 每天一个Flutter开发小项目 (8) : 掌握Flutter网络请求 - 构建每日名言应用
  • Kafka重复消费问题和解决方式
  • Redis大key
  • 基于JAVA+Spring+mysql_快递管理系统源码+设计文档
  • C++20 Lambda表达式新特性:包扩展与初始化捕获的强强联合
  • WatchDog 看门狗
  • 22-接雨水
  • 什么是蓝绿发布?
  • vulfocus靶场漏洞学习——wordpress 垂直越权 (CVE=2021-21389)
  • DeepSeek 1.5B蒸馏模型的J6部署(Llama方式)
  • 【算法】图论 —— Floyd算法 python
  • Unity自动旋转物体功能实现
  • React入门基础(一):为什么说React是现代前端的必然选择?