ruoyi-cloud 服务间调用验证token

ruoyi文档中没有说明服务间调用传递token

1.ruoyi拦截器,可以看到服务间调用会从请求的请求头中去获取token

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
    {
        if (!(handler instanceof HandlerMethod))
        {
            return true;
        }

        SecurityContextHolder.setUserId(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USER_ID));
        SecurityContextHolder.setUserName(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USERNAME));
        SecurityContextHolder.setUserKey(ServletUtils.getHeader(request, SecurityConstants.USER_KEY));

        String token = SecurityUtils.getToken();
        if (StringUtils.isNotEmpty(token))
        {
            LoginUser loginUser = AuthUtil.getLoginUser(token);
            if (StringUtils.isNotNull(loginUser))
            {
                AuthUtil.verifyLoginUserExpire(loginUser);
                SecurityContextHolder.set(SecurityConstants.LOGIN_USER, loginUser);
            }
        }
        return true;
    }

2. feign调用传递token

@FeignClient(contextId = "RemoteScaService", value = ServiceNameConstants.SCA_SERVICE, fallbackFactory = RemoteScaFallbackFactory.class)
public interface RemoteScaService
{
    /**
     * 上传文件
     *
     * @param lsScaFile 文件信息
     * @return 结果
     */
    @PostMapping("/ossFile")
    public AjaxResult add(@RequestBody LsScaFile lsScaFile, @RequestHeader(SecurityConstants.FROM_SOURCE) String source,@RequestHeader(name = "Authorization",required = true) String token);
}

3. 调用方法时请求头放入token

String token = SecurityUtils.getToken();

        AjaxResult add = remoteScaService.add(lsScaFile, ServiceNameConstants.SCA_SERVICE,token);

4. 然后就可以携带token访问了

### 关于 RuoYi-Cloud 的实践案例教程 RuoYi-Cloud 是一款基于 Spring Boot 和 Spring Cloud Alibaba 构建的分布式微服务架构平台,提供了丰富的功能模块以及完善的生态系统[^2]。以下是关于其实践案例、教程、示例代码和部署流程的具体说明。 --- #### 一、应用案例最佳实践 RuoYi-Cloud 可用于构建企业级的应用场景,例如公司内部管理系统。它能够实现以下核心功能: - **部门管理**:支持创建、修改、删除部门结构。 - **员工管理**:提供员工信息录入、查询、更新操作。 - **角色权限分配**:通过集成 Sa-Token 权限控制组件,灵活定义同用户的访问范围[^3]。 - **工作流审批**:借助 Flowable 工作流引擎设计复杂的业务审批逻辑。 这些功能可以通过微服务的方式拆分到同的子系统中,从而提升系统的可维护性和扩展能力[^1]。 --- #### 二、快速入门教程 为了帮助开发者更高效地上手 RuoYi-Cloud,官方文档和技术社区提供了详尽的学习资源。以下是主要步骤概述: 1. **搭建开发环境** - 安装 JDK (推荐版本为 1.8 或以上),Maven, MySQL 数据库等基础依赖项。 - 下载并安装 Nacos 注册中心和服务发现工具作为注册中心和配置管理中心。 2. **克隆项目代码** 使用 Git 命令从 Gitee 地址获取最新源码: ```bash git clone https://gitee.com/y_project/RuoYi-Cloud.git ``` 3. **导入 IDE 并配置 Maven** 将项目导入 IDEA 或其他支持 Java 开发的 IDE 中,并确保所有依赖已正确加载。 4. **启动必要模块** 根据实际需求决定哪些模块需要开启。通常情况下至少要启动以下几个模块: - `RuoYiGatewayApplication`(网关模块) - `RuoYiAuthApplication`(认证模块) - `RuoYiSystemApplication`(系统模块) 如果涉及缓存,则需提前完成 Redis 密码设置等相关准备工作[^4]。 5. **初始化数据库表结构** 执行 SQL 脚本文件,在目标数据库实例里生成所需的表格字段等内容。 6. **测试接口调用** 访问默认地址 `http://localhost:8080` 登录后台界面验证各项功能是否正常运作。 --- #### 三、典型生态项目介绍 除了标准版外,还有增强型变体——RuoYi-Cloud-Plus 提供更多高级特性,比如支付插件对接支付宝微信渠道、短信通知模板定制化等等[^1]。这类衍生产品进一步拓宽了应用场景边界。 --- #### 四、常见问题排查指南 当遇到异常情况时可以参照如下建议解决: - 若因未指定 redis 密码引发错误,请检查 application.yml 文件中的 spring.redis.password 参数值是否匹配实际情况[^4]; - 对于跨域请求失败现象,确认 gateway 层面已经允许对应 origin 请求头存在即可恢复正常通信行为。 --- ```java // 示例代码片段展示如何自定义 Sentinel 流量防护规则 import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.SphU; import com.alibaba.csp.sentinel.slots.block.BlockException; public class CustomFlowControl { public static void main(String[] args) throws InterruptedException { while (true){ Entry entry = null; try{ // 创建入口对象 entry = SphU.entry("CustomResource"); System.out.println(Thread.currentThread().getName() + " passed!"); } catch(BlockException e){ handleBlock(e); } finally{ if(entry !=null){ entry.exit(); } Thread.sleep(100); } } } private static void handleBlock(BlockException ex){ System.err.println("Blocked by sentinel:" +ex.getClass().getSimpleName()); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值