在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