Spring集成CXF客戶端獲取HttpServletRequest,HttpServletResponse


在Spring繼承CXF中要用到request來獲取IP

這裏使用到切點,

<jaxws:endpoint id="myService" implementor="#myServiceImpl" address="/MyService">
	  <jaxws:inInterceptors>
      	<ref bean="clientIpInInterceptor"/>
      </jaxws:inInterceptors>
	</jaxws:endpoint>
<bean id="myServiceImpl" class="com.service.MyService" />


public class ClientIpInInterceptor extends AbstractPhaseInterceptor<Message> {
	
	public ClientIpInInterceptor() {
		super(Phase.RECEIVE);
	}

	@Override
	public void handleMessage(Message message) throws Fault {
		String result = null;
		
		try {
			HttpServletRequest request = (HttpServletRequest) message.get(
					AbstractHTTPDestination.HTTP_REQUEST);//這句可以獲取到request
			String ip = StringUtils.getIpFromRequest(request);//自己寫校驗IP規則
			message.setContent(String.class, ip);
			
			
		} catch (Exception e) {
			e.printStackTrace();
			
		}
		
	}

}

如果想要在接口中獲取到request,可以這樣做

@WebService(endpointInterface = "com.service.IService")
public class MyService implements IService {

	@Resource
	private WebServiceContext context;
// MessageContext ctx = context.getMessageContext();
		// HttpServletRequest request = (HttpServletRequest) ctx
		// .get(AbstractHTTPDestination.HTTP_REQUEST);
		// HttpServletResponse response = (HttpServletResponse) ctx
		// .get(AbstractHTTPDestination.HTTP_RESPONSE);

在你的接口方法中寫就能獲取了,主要是
@Resource
	private WebServiceContext context;
這個是官方文檔提供的


還有一個重要的就是切點中,切點有進入方法時截獲在上面講了,但是接口調用完畢後返回出去就不知道怎麼獲取request,網上沒有說明

<bean id="OutInterceptor" class="xxxx.OutInterceptor" />

<jaxws:outFaultInterceptors>
      <ref bean="OutInterceptor"/>
      </jaxws:outFaultInterceptors>

這裏就不知道怎麼獲取了.

public class OutInterceptor extends AbstractSoapInterceptor {
	
	private JiBXConverter wmsConverter;
	
	public OutInterceptor() {
		super(Phase.PRE_STREAM);//Phase這個類就知道怎麼用.

	}

	@Override
	public void handleMessage(SoapMessage message) throws Fault {xxx}
SoapMessage 這個類就不知道怎麼獲取了.安裝上面的方式試了一下,爲null



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章