`
dycsos123ok
  • 浏览: 81667 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

*****cxf之Session会话问题*****

阅读更多

 

说明:CXF作为Webservice很好的实现框架,让Webservice的开发变得极期方便(Xfire框架居说目前已经不再维护,使用越来越少了),然后在使用中也遇到很多细节问题,如Session会话问题就是其中一个,由于网上好多解决方法试了都不好用,最近刚刚解决了在此备份一下,以便以后使用方便。


一、建立Web工程,加入CXF的jar包,项目中使用的版本为cxf2.6.0。

 

 

二、定义两个接口IRegirstInfo、ILoginInfo; IRegirstInfo接口定一个注册方法,ILoginInfo定义一个登录方法。

 

 

@WebService
public interface IRegirstInfo {
	public void UserRegirstInfo();
}



@WebService
public interface ILoginInfo {
	public String UserLoginDao(String token);
}

 

 三、定义两个接口的实现类RegirstInfoService、UserLoginService ; RegirstInfoService服务类里生成一个Token信息,然后将它放到Session里,然后在UserLoginService 服务里我们从Session里取出这个Token信息。

 

 

@WebService  
public class RegirstInfoService implements IRegirstInfo {   
    @Resource  
    private WebServiceContext wsContext;   
    private MessageContext mc;   
    private HttpSession session;   
  
    public void UserRegirstInfo() {   
        // 获取上下文,保存request,session信息.   
        mc = wsContext.getMessageContext();   
        session = ((javax.servlet.http.HttpServletRequest) mc   
                .get(MessageContext.SERVLET_REQUEST)).getSession();   
  
        ((javax.servlet.ServletContext) mc.get(MessageContext.SERVLET_CONTEXT))   
                .setAttribute("session", session);// 把session放到ServletContext中。   
  
        String token = UUID.randomUUID().toString(); // 生成Token   
  
        session.setAttribute("token", token); // 将生成的token放入Session   
        //生成request,来获取客户端的IP   
        HttpServletRequest request = (HttpServletRequest) mc   
                .get("HTTP.REQUEST");   
        System.out.println("request:" + request.getRemoteAddr());   
    }   
  
}  
 

 

 

@webservice  
public class UserLoginService implements ILoginInfo {   
    @Resource  
    private WebServiceContext wsContext;   
    private MessageContext mc;   
    private HttpSession session;   
  
    public String UserLoginDao(String token) {   
        mc = wsContext.getMessageContext();   
        session = (HttpSession) ((javax.servlet.ServletContext) mc   
                .get(MessageContext.SERVLET_CONTEXT)).getAttribute("session");   
        System.out.println("Token:" + session.getAttribute("token"));   
        return "Success--->" + token;   
    }   
  
}  
 

 

四、web.xml

 

 

<context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>WEB-INF/beans.xml</param-value>  
    </context-param>  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
    <display-name>cxf</display-name>  
    <servlet>  
        <servlet-name>cxf</servlet-name>  
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>cxf</servlet-name>  
        <url-pattern>/*</url-pattern>  
    </servlet-mapping>  
 

 

五、还有一个bean.xml是用来发布服务的

 

 

<import resource="classpath:META-INF/cxf/cxf.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
    <!-- ===============具体服务实例============= -->  
  
    <bean id="userLoginService" class="com.dyc.impl.UserLoginService" />  
  
    <bean id="regirstInfoService" class="com.dyc.impl.RegirstInfoService" />  
  
  
    <!-- ===============对外发布服务============= -->  
    <jaxws:endpoint id="loginService" implementor="#userLoginService"  
        address="/LoginService">  
    </jaxws:endpoint>  
  
    <jaxws:endpoint id="regirstService" implementor="#regirstInfoService"  
        address="/RegirstService">  
    </jaxws:endpoint>  
 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics