`

CXF session问题

    博客分类:
  • CXF
 
阅读更多

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

 

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

 

 

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

 

 

Java代码 复制代码 收藏代码
  1. @WebService
  2. publicinterface IRegirstInfo {
  3. publicvoid UserRegirstInfo();
  4. }
  5. @WebService
  6. publicinterface ILoginInfo {
  7. public String UserLoginDao(String token);
  8. }
@WebService
public interface IRegirstInfo {
	public void UserRegirstInfo();
}



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

 

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

 

 

Java代码 复制代码 收藏代码
  1. @WebService
  2. publicclass RegirstInfoService implements IRegirstInfo {
  3. @Resource
  4. private WebServiceContext wsContext;
  5. private MessageContext mc;
  6. private HttpSession session;
  7. publicvoid UserRegirstInfo() {
  8. // 获取上下文,保存request,session信息.
  9. mc = wsContext.getMessageContext();
  10. session = ((javax.servlet.http.HttpServletRequest) mc
  11. .get(MessageContext.SERVLET_REQUEST)).getSession();
  12. ((javax.servlet.ServletContext) mc.get(MessageContext.SERVLET_CONTEXT))
  13. .setAttribute("session", session);// 把session放到ServletContext中。
  14. String token = UUID.randomUUID().toString(); // 生成Token
  15. session.setAttribute("token", token); // 将生成的token放入Session
  16. //生成request,来获取客户端的IP
  17. HttpServletRequest request = (HttpServletRequest) mc
  18. .get("HTTP.REQUEST");
  19. System.out.println("request:" + request.getRemoteAddr());
  20. }
  21. }
@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());   
    }   
  
}  

 

 

Java代码 复制代码 收藏代码
  1. @webservice
  2. publicclass UserLoginService implements ILoginInfo {
  3. @Resource
  4. private WebServiceContext wsContext;
  5. private MessageContext mc;
  6. private HttpSession session;
  7. public String UserLoginDao(String token) {
  8. mc = wsContext.getMessageContext();
  9. session = (HttpSession) ((javax.servlet.ServletContext) mc
  10. .get(MessageContext.SERVLET_CONTEXT)).getAttribute("session");
  11. System.out.println("Token:" + session.getAttribute("token"));
  12. return"Success--->" + token;
  13. }
  14. }
@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

 

 

Xml代码 复制代码 收藏代码
  1. <context-param>
  2. <param-name>contextConfigLocation</param-name>
  3. <param-value>WEB-INF/beans.xml</param-value>
  4. </context-param>
  5. <listener>
  6. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  7. </listener>
  8. <display-name>cxf</display-name>
  9. <servlet>
  10. <servlet-name>cxf</servlet-name>
  11. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  12. <load-on-startup>1</load-on-startup>
  13. </servlet>
  14. <servlet-mapping>
  15. <servlet-name>cxf</servlet-name>
  16. <url-pattern>/*</url-pattern>
  17. </servlet-mapping>
<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是用来发布服务的

 

 

Xml代码 复制代码 收藏代码
  1. <importresource="classpath:META-INF/cxf/cxf.xml"/>
  2. <importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
  3. <importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
  4. <!-- ===============具体服务实例============= -->
  5. <beanid="userLoginService"class="com.dyc.impl.UserLoginService"/>
  6. <beanid="regirstInfoService"class="com.dyc.impl.RegirstInfoService"/>
  7. <!-- ===============对外发布服务============= -->
  8. <jaxws:endpointid="loginService"implementor="#userLoginService"
  9. address="/LoginService">
  10. </jaxws:endpoint>
  11. <jaxws:endpointid="regirstService"implementor="#regirstInfoService"
  12. address="/RegirstService">
  13. </jaxws:endpoint>
分享到:
评论

相关推荐

    利用spring security 给cxf的业务方法添加保护

    在IT行业中,安全是任何应用程序的核心组成部分,Spring Security作为一个强大的安全框架,被广泛用于保护Java应用,包括基于CXF的服务。本篇文章将深入探讨如何利用Spring Security为CXF的业务方法添加保护,确保...

    CXF集成spring hibernate

    【CXF集成Spring Hibernate】是将三个核心的Java技术——CXF、Spring和Hibernate整合到一个应用程序中...然而,需要注意的是,性能优化和正确处理事务边界是集成过程中不可忽视的问题,需要根据具体应用场景进行调整。

    ssm+shiro+cxf

    **Apache Shiro** 是一个强大的安全框架,提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密服务。在本项目中,Shiro被用来实现用户登录验证、权限控制以及角色...

    cxf的web开发框架

    因此基于cxf实现了一个简单的web框架,通过run方式即可启动。本框架支持发布支持reset接口、session、静态资源(图片、html、js、css等)。\src\main\java\com\changyou\test\main\ServerStart.java为启动文件件。...

    xfire开发的带session生命周期的webservice应用工程实例

    XFire(现已被Apache CXF所取代)是一个轻量级的Web服务框架,它提供了快速、简单地创建和部署Web服务的能力。XFire的核心优势在于其与Spring框架的紧密集成,这使得开发者可以轻松地将Web服务功能融入到现有Spring...

    用CXF开发RESTful风格WebService

    * 无状态:RESTful风格WebService不保存Session信息,所有操作都是无状态的。 * 缓存friendly:RESTful风格WebService支持缓存机制,提高了系统性能。 * 统一接口:RESTful风格WebService使用统一的接口描述语言来...

    cfx webservice 入门 详细步骤

    Apache CXF 是一个开源的 Java 框架,主要用于构建和开发 Web 服务。它提供了丰富的功能,包括支持 SOAP、RESTful API、WS-* 标准以及多种协议和数据格式。本文将详细介绍如何入门使用 CXF 来创建和部署 Web 服务。 ...

    java.net.SocketException Connection reset 解决方法

    解决这个问题的关键是找到问题的根源,即 timer 的方法,并对其进行优化,以避免大量的 Socket 连接建立和关闭。 总结 Conexion reset by peer 异常是一个常见的 SocketException,它可能是由连接断开或退出未关闭...

    springMVC+hibernate+webservice

    Hibernate提供了Session接口来管理对象的状态,Query和Criteria API来进行复杂的数据查询,以及事务管理和缓存机制,提高了数据访问的效率和一致性。 【WebService】在本项目中,可能使用了Apache CXF来实现。CXF是...

    Java SSH2框架的CRUD经典例子

    开发者可以通过编写Hibernate的实体类,定义数据表结构,然后使用Session接口进行增删改查操作。 在myEclipse8.5这样的集成开发环境中,开发者可以方便地创建SSH2项目,配置相关的库,编写Action、Service、DAO层的...

    WebService开发指南

    3. **Session管理**:在分布式环境中,Axis2支持会话管理,确保跨多个WebService调用时的数据一致性。 4. **使用Spring的JavaBean发布WebService**:结合Spring框架,可以方便地将JavaBean转换为可发布的WebService...

    从小公司到大公司的面试题

    CXF是一个开源框架,用于构建和消费Web服务。它支持SOAP和RESTful风格的服务,并且提供了丰富的功能,如安全、事务处理等。 4. **Hibernate的工作原理**: Hibernate是一个流行的ORM(对象关系映射)框架,简化了...

    java web整合开发王者归来源代码2

    通过对这些源代码的学习和实践,开发者不仅可以掌握Java Web的基础知识,还能深入理解各个框架的内部工作原理和最佳实践,这对于提升Java Web开发技能和解决实际问题大有裨益。在实际工作中,开发者可以根据项目的...

    数据采集系统

    采用二位运算能够使得权限运算更加快捷,而且极大 降低 session存储量,有效利用服务器资源. .系统中通过 cxf webservice引擎,将统计服务对外公开,可实现第三方系统的无 缝整合. .利用aop + scheduler 采用动态表...

    java工程师简历_java简历.doc

    5. **缓存与队列技术**:使用Redis、ActiveMQ和Ehcache,提升系统性能和响应速度,例如Redis用于模拟session和实现单点登录,ActiveMQ处理消息队列,Ehcache则用于缓存。 6. **搜索引擎**:熟悉ElasticSearch,用于...

    java变态面试题.pdf

    Java 面试题知识点总结 ...* WebService 的主要技术亮点:WebService 是基于SOAP或RESTful的,常用的框架有 Axis、CXF 等。 * Tomcat 服务器:如何基于 JNDI 技术配置数据库连接池,如何在 Tomcat 中嵌入一个测试项目。

    springbootcxfhibernate

    在DAO实现类中,我们可以借助Hibernate提供的Session接口进行CRUD(Create、Read、Update、Delete)操作。 在SpringBoot的主配置类中,我们可以通过`@EnableJpaRepositories`、`@EntityScan`和`@SpringBoot...

    Java Web整合开发王者归来随书光盘下build、src(5/5)

    1. **xfireDemo**:XFire是早期的一个SOAP服务框架,现在已被Apache CXF所取代。xfireDemo可能包含了一个使用XFire创建和消费Web服务的示例,帮助开发者了解如何在Java Web应用中实现服务接口和调用。 2. **Struts2...

    java2年工作经验简历_java简历.docx

    她还运用Redis缓存来优化首页广告位的展示,使用ActiveMQ进行商品索引同步,使用FreeMarker进行商品详情页的静态化展示,同时将Session信息存储到Redis缓存服务器中,确保了数据共享和系统性能的提升。 此外,郑...

    基于Flex三种通讯方式的Java配置与整合.docx

    &lt;param-name&gt;singleSession &lt;param-value&gt;true ``` 通过以上配置,我们可以实现基于Flex的Java项目中三种通讯方式的配置与整合。每种通讯方式都有其适用场景:AMF适用于高性能、低延迟的应用场景;Service...

Global site tag (gtag.js) - Google Analytics