CXF resolve not obtain session

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
Here Insert Picture Description
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();
        }
    }
}

Guess you like

Origin blog.csdn.net/qq_28929579/article/details/88226566