WSO2AM - 将请求IP传递给后端

问题描述 投票:0回答:1

我有一个RESTful Web服务。其端点需要请求IP。我用bellow函数来获取请求IP。

String callerIpAddress = "";
String xForwardedForHeader = request.getHeader("X-FORWARDED-FOR");
if (xForwardedForHeader == null) {  
    callerIpAddress = request.getRemoteAddr();  
}

如果我直接运行这些端点,变量callerIpAddress会显示请求IP。

但是当我通过WSO2 AM发布它时。 callerIpAddress仅显示值:127.0.0.1。

我在WSO2 AM的In Flow中使用了一个序列,但结果仍然相同

<sequence xmlns="http://ws.apache.org/ns/synapse" name="get-real-ip-json-input">

<property name="X-Forwarded-For" expression="get-property('axis2','REMOTE_ADDR')"/>
<log level="custom">
   <property name="Actual Remote Address " expression="get-property('X-Forwarded-For')"/>
</log>
</sequence>

任何人都可以帮我解决这个问题吗?谢谢

java wso2-am
1个回答
0
投票

创建文件global_ext.xml<APIM_HOM>/repository/deployment/server/synapse-configs/default/sequences(API_HOME是您的主页目录WSO2AM,如/opt/WSO2AM-vername),其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--In">
   <filter source="get-property('transport','X-Forwarded-For')" regex=".*">
      <then>
         <property name="coming-X-Forwarded-For"
                   expression="fn:concat(get-property('transport','X-Forwarded-For'), ', ')"
                   scope="axis2"
                   type="STRING"/>
         <property name="clientIP" expression="get-property('axis2','REMOTE_ADDR')"/>
         <property name="X-Forwarded-For"
                   expression="fn:concat(get-property('axis2','coming-X-Forwarded-For'), get-property('clientIP'))"
                   scope="transport"
                   type="STRING"/>
      </then>
      <else>
         <property name="X-Forwarded-For"
                   expression="get-property('axis2','REMOTE_ADDR')"
                   scope="transport"
                   type="STRING"/>
      </else>
   </filter>
   <log level="custom">
      <property name="client_ip_address"
                expression="get-property('transport','X-Forwarded-For')"/>
   </log>
</sequence>

有时在添加新序列后需要重新启动wso2-am。

在您的REST Web服务中,您可以拥有一个将返回IP地址的功能,例如:

private String getSourceIp() {
    if (request!= null && request.getHeader("X-Forwarded-For") != null) {
      return request.getHeader("X-Forwarded-For");
    } else {
      return "0.0.0.0"; //or you can throw an error depending on how you want to handle it.
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.