2016-07-29 72 views
0

我有以下类,我如何获取传入请求源的IP地址?我已经检查了几个解决方案,在互联网上也没有找到一些合适的一个,如果您需要了解项目结构,我可以添加更多的信息,感谢如何获取传入请求的IP地址SOAP

@EnableWs 
@Configuration 
public class WebServiceConfig extends WsConfigurerAdapter { 

    @Bean 
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) { 
     MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
     servlet.setApplicationContext(applicationContext); 
     servlet.setTransformWsdlLocations(true); 
     return new ServletRegistrationBean(servlet, "/ws/*"); 
    } 

    @Bean(name = "doSomething") 
    public DefaultWsdl11Definition defaultValidateWsdl11Definition(XsdSchema validateSchema) { 
     DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); 
     wsdl11Definition.setPortTypeName("ValidatePort"); 
     wsdl11Definition.setLocationUri("/ws"); 
     wsdl11Definition.setTargetNamespace("http://www.org.com/validate"); 
     wsdl11Definition.setSchema(validateSchema); 
     return wsdl11Definition; 
    } 

    @Bean(name = "doSecond") 
    public DefaultWsdl11Definition defaultActionWsdl11Definition(XsdSchema actionSchema) { 
     DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); 
     wsdl11Definition.setPortTypeName("ActionPort"); 
     wsdl11Definition.setLocationUri("/ws"); 
     wsdl11Definition.setTargetNamespace("http://www.org.com/action"); 
     wsdl11Definition.setSchema(actionSchema); 
     return wsdl11Definition; 
    } 

    @Bean 
    public XsdSchema validateSchema() { 
     return new SimpleXsdSchema(new ClassPathResource("doSomething.xsd")); 
    } 

    @Bean 
    public XsdSchema actionSchema() { 
     return new SimpleXsdSchema(new ClassPathResource("doSecond.xsd")); 
    } 

} 
<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:tns="http://www.org.com/doSomething" 
    targetNamespace="http://www.org.com/doSomething" elementFormDefault="qualified"> 

    <xs:element name="getActionRequest"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Username" type="xs:string"/> 
       <xs:element name="Password" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="getDoSomethingResponse"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Code" type="xs:string"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 
+1

你检查过HTTP头文件吗?看到[这](http://stackoverflow.com/questions/559155/how-do-i-get-a-httpservletrequest-in-my-spring-beans) – Tibrogargan

+0

谢谢,让我检查它 – imoteb

回答

1

由于inidicated通过Tibrogargan,它应该是在头部。你可以让你Request注入这样

@Autowired 
private HttpServletRequest request; 

,并得到这样

protected String getIpAddress() { 
    String ipAddress = request.getHeader("X-FORWARDED-FOR"); 
    if (ipAddress == null) { 
     ipAddress = request.getRemoteAddr(); 
    } 
    return ipAddress; 
} 

的IP地址,你可以有机会与X-FORWARDED-FOR头获取原始发件人的IP地址,如果没有被遮蔽一个代理。否则getRemoteAddr()应该这样做。

+0

它的工作!非常感谢 – imoteb

+0

不客气 – Matt