Groovy脚本报错:无If()方法适配,寻求IP提取代码协助
问题解决:Groovy脚本报错No signature of method...If()
报错原因
Groovy是大小写敏感的语言,你代码里把条件判断关键字if写成了大写的If,虚拟机将If识别为方法调用,但当前上下文不存在该方法,因此抛出此错误。
修正后的代码
def map = message.getHeaders(); String value = map.get("x-forwarded-for"); String[] splitterValues = value != null ? value.split(",") : null ; if ( splitterValues != null && splitterValues.length > 1 ) { int clientIPPosition = splitterValues.length - 2; def clientIP = splitterValues[clientIPPosition]; if ( clientIP != null && "123".equals(clientIP.trim()) ) { messageLog.setStringProperty("AllowListed clientIP", clientIP); } }
额外注意事项
- 原代码中
splitterValues.length > 0的判断存在风险:若数组长度为1,splitterValues.length -2会得到-1,访问数组索引-1会触发数组越界异常,因此改为splitterValues.length > 1确保索引有效。 x-forwarded-for通常以逗号分隔多个IP,“倒数第二个为客户端真实IP”的逻辑需结合你的实际场景确认,避免索引取值错误。
内容的提问来源于stack exchange,提问作者SAP_CPI_Groovy
相关产品推荐
相关产品推荐

