Disclaimer: This article is a blogger original article, shall not be reproduced without the bloggers allowed. https://blog.csdn.net/qq_28929579/article/details/88226566
phenomenon:
When the call interface WebContext.getSession () == null
analysis:
In web.xml WS interfaces is taking the CXFServlet
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
I did not go DispatcherServlet, so there is no configuration loaded spring-mvc.xml
not through ContextInterceptor set naturally get less.
solve:
Add cxf custom interceptor in spring-cxf-jaxrs.xml, the interceptor can be packaged under ContextInterceptor.
<jaxrs:server id="esfServiceContainer" address="/esf" >
<!-- 用cxf格式拦截器做转换调用ContextInterceptor拦截器 -->
<jaxrs:inInterceptors>
<bean class="com.xxx.interceptor.CXFInterceptor" />
</jaxrs:inInterceptors>
<jaxrs:serviceBeans>
<ref bean="statusWebService" />
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json;charset=UTF-8" />
<entry key="xml" value="application/xml" />
</jaxrs:extensionMappings>
<jaxrs:languageMappings>
<entry key="en" value="en-gb"/>
</jaxrs:languageMappings>
<jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider">
<property name="mapper" ref="jsonMapper" />
</bean>
</jaxrs:providers>
</jaxrs:server>
public class CXFInterceptor extends AbstractPhaseInterceptor<Message>{
public CXFInterceptor(String phase) {
super(phase);
}
public CXFInterceptor() {
super(Phase.RECEIVE);
}
@Override
public void handleMessage(Message message) throws Fault{
// 用户会话信息
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse) message.get(AbstractHTTPDestination.HTTP_RESPONSE);
try {
new ContextInterceptor().preHandle(request, response, "");
} catch (Exception e) {
e.printStackTrace();
}
}
}