加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Java代码审计之SpEL表达式注入

发布时间:2019-03-20 11:27:20 所属栏目:建站 来源:Lateink
导读:副标题#e# 一、SpEL 表达式注入 Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言、用于在运行时查询和操作对象图;语法上类似于 Unified EL,但提供了更多的特性,特别是方法调用和基本字符串模板函数。SpEL 的诞生是为了给 Spring 社区提

拿到项目代码,全局搜索一下 org.springframework.expression.spel.standard,发现 DefaultSubscriptionRegistry.java 文件处有导入。

Java代码审计之SpEL表达式注入

再搜索一下 SpelExpressionParser

往下跟进发现如下关键代码,具体分析看代码注释

  1. @Override 
  2. protected void addSubscriptionInternal( 
  3. String sessionId, String subsId, String destination, Message<?> message) { 
  4. Expression expression = null; 
  5. MessageHeaders headers = message.getHeaders(); 
  6.         // 这里可以看出 SpEL 表达式 expression 是从 headers 中的 selector 字段中取出来 
  7. String selector = SimpMessageHeaderAccessor.getFirstNativeHeader(getSelectorHeaderName(), headers); 
  8. if (selector != null) { 
  9. try { 
  10.                 //生成 expression 对象 
  11. expression = this.expressionParser.parseExpression(selector); 
  12. this.selectorHeaderInUse = true; 
  13. if (logger.isTraceEnabled()) { 
  14. logger.trace("Subscription selector: [" + selector + "]"); 
  15. catch (Throwable ex) { 
  16. if (logger.isDebugEnabled()) { 
  17. logger.debug("Failed to parse selector: " + selector, ex); 
  18.         // expression 传入 addSubscription 这个函数里面,即存放在 this.subscriptionRegistry 
  19. this.subscriptionRegistry.addSubscription(sessionId, subsId, destination, expression); 
  20. this.destinationCache.updateAfterNewSubscription(destination, sessionId, subsId); 

再搜索一下 this.subscriptionRegistry,,看看有没有调用传进去的 expression。

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!