如何向Spring Boot/Vaadin应用传递来自JD Edwards E1的外部敏感数据
解决方案
低风险传参方案
下面是3种不需要明文在URL参数传递敏感元数据的可行方案,可根据你的现有架构灵活选择:
- HTTP自定义请求头传递
利用E1调用外部应用支持配置自定义请求头的特性,将用户名、上下文信息等元数据放在自定义请求头(如X-E1-User-Context)中传输,不要放在URL参数里。相比URL参数,请求头不会默认记录在浏览器历史、服务器访问日志中,泄露风险低很多。
Vaadin侧可以在视图初始化时通过VaadinRequest.getCurrent().getHeader("头名称")直接获取参数,也可以提前在Spring拦截器中将请求头内容解析后存入Vaadin会话或Spring安全上下文,供后续业务逻辑调用。 - 一次性临时令牌绑定方案
该方案安全性最高,适合传递密码这类高敏感信息:- E1发起Vaadin调用前,先调用Vaadin侧的内部受限接口(仅开放E1 IP段访问),将所有用户元数据通过POST请求体提交给Vaadin
- Vaadin生成一个长度≥32位的随机一次性令牌,将令牌和用户元数据绑定存入缓存(如Redis、Guava本地缓存),设置有效期为5~10分钟
- E1仅将该令牌作为URL参数传给Vaadin视图,Vaadin拿到令牌后从缓存中读取对应的元数据,读取完成后立即删除缓存中的令牌
该方案完全避免了敏感信息暴露在URL、日志中的可能,就算令牌意外泄露也会很快过期失效,同时完美解决了@RestController和Vaadin视图之间的数据传递问题。
- OAuth2.0 JWT载荷传递
直接使用E1支持的OAuth2.0认证方式,将需要传递的用户元数据编码进JWT的Payload字段中,JWT本身会做签名防篡改,你也可以选择对Payload加密进一步提升安全性。Vaadin侧只需要配置JWT验签逻辑,就能直接从认证信息中解析出所有元数据,不需要额外的传参逻辑。
传输安全加固措施
仅靠防火墙防护不足以覆盖内网渗透、日志泄露等风险,建议叠加以下防护手段:
- 全链路强制HTTPS:哪怕是内网部署,也要为Vaadin和E1的接口配置TLS 1.2+版本的HTTPS加密,避免内网抓包窃取敏感信息
- IP白名单限制:在Vaadin应用层面加一层访问控制,只允许E1的服务器IP段访问相关接口,和防火墙规则形成双层防护
- 敏感数据不落地:用户密码这类高敏感信息不要存入Vaadin的会话、数据库、日志文件中,拿到后仅暂存内存,用户提交表单调用完E1接口后立即销毁
- 权限最小化:给E1调用Vaadin的账号、Vaadin调用E1的接口账号都配置最小权限,只开放业务必需的访问权限
- 禁用敏感参数日志打印:调整Spring Boot和Vaadin的日志配置,禁止打印自定义请求头、JWT载荷、POST请求体中的敏感字段
内容的提问来源于stack exchange,提问作者Joseph Gagnon
相关产品推荐
相关产品推荐

