说明:CXF作为Webservice很好的实现框架,让Webservice的开发变得极期方便(Xfire框架居说目前已经不再维护,使用越来越少了),然后在使用中也遇到很多细节问题,如Session会话问题就是其中一个,由于网上好多解决方法试了都不好用,最近刚刚解决了在此备份一下,以便以后使用方便。
一、建立Web工程,加入CXF的jar包,项目中使用的版本为cxf2.6.0。
二、定义两个接口IRegirstInfo、ILoginInfo; IRegirstInfo接口定一个注册方法,ILoginInfo定义一个登录方法。
- @WebService
- publicinterface IRegirstInfo {
- publicvoid UserRegirstInfo();
- }
- @WebService
- publicinterface ILoginInfo {
- public String UserLoginDao(String token);
- }
@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
- publicclass RegirstInfoService implements IRegirstInfo {
- @Resource
- private WebServiceContext wsContext;
- private MessageContext mc;
- private HttpSession session;
- publicvoid 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 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
- publicclass 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;
- }
- }
@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>
<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是用来发布服务的
- <importresource="classpath:META-INF/cxf/cxf.xml"/>
- <importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
- <importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
- <!-- ===============具体服务实例============= -->
- <beanid="userLoginService"class="com.dyc.impl.UserLoginService"/>
- <beanid="regirstInfoService"class="com.dyc.impl.RegirstInfoService"/>
- <!-- ===============对外发布服务============= -->
- <jaxws:endpointid="loginService"implementor="#userLoginService"
- address="/LoginService">
- </jaxws:endpoint>
- <jaxws:endpointid="regirstService"implementor="#regirstInfoService"
- address="/RegirstService">
- </jaxws:endpoint>
相关推荐
在IT行业中,安全是任何应用程序的核心组成部分,Spring Security作为一个强大的安全框架,被广泛用于保护Java应用,包括基于CXF的服务。本篇文章将深入探讨如何利用Spring Security为CXF的业务方法添加保护,确保...
【CXF集成Spring Hibernate】是将三个核心的Java技术——CXF、Spring和Hibernate整合到一个应用程序中...然而,需要注意的是,性能优化和正确处理事务边界是集成过程中不可忽视的问题,需要根据具体应用场景进行调整。
**Apache Shiro** 是一个强大的安全框架,提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密服务。在本项目中,Shiro被用来实现用户登录验证、权限控制以及角色...
因此基于cxf实现了一个简单的web框架,通过run方式即可启动。本框架支持发布支持reset接口、session、静态资源(图片、html、js、css等)。\src\main\java\com\changyou\test\main\ServerStart.java为启动文件件。...
XFire(现已被Apache CXF所取代)是一个轻量级的Web服务框架,它提供了快速、简单地创建和部署Web服务的能力。XFire的核心优势在于其与Spring框架的紧密集成,这使得开发者可以轻松地将Web服务功能融入到现有Spring...
* 无状态:RESTful风格WebService不保存Session信息,所有操作都是无状态的。 * 缓存friendly:RESTful风格WebService支持缓存机制,提高了系统性能。 * 统一接口:RESTful风格WebService使用统一的接口描述语言来...
Apache CXF 是一个开源的 Java 框架,主要用于构建和开发 Web 服务。它提供了丰富的功能,包括支持 SOAP、RESTful API、WS-* 标准以及多种协议和数据格式。本文将详细介绍如何入门使用 CXF 来创建和部署 Web 服务。 ...
解决这个问题的关键是找到问题的根源,即 timer 的方法,并对其进行优化,以避免大量的 Socket 连接建立和关闭。 总结 Conexion reset by peer 异常是一个常见的 SocketException,它可能是由连接断开或退出未关闭...
Hibernate提供了Session接口来管理对象的状态,Query和Criteria API来进行复杂的数据查询,以及事务管理和缓存机制,提高了数据访问的效率和一致性。 【WebService】在本项目中,可能使用了Apache CXF来实现。CXF是...
开发者可以通过编写Hibernate的实体类,定义数据表结构,然后使用Session接口进行增删改查操作。 在myEclipse8.5这样的集成开发环境中,开发者可以方便地创建SSH2项目,配置相关的库,编写Action、Service、DAO层的...
3. **Session管理**:在分布式环境中,Axis2支持会话管理,确保跨多个WebService调用时的数据一致性。 4. **使用Spring的JavaBean发布WebService**:结合Spring框架,可以方便地将JavaBean转换为可发布的WebService...
CXF是一个开源框架,用于构建和消费Web服务。它支持SOAP和RESTful风格的服务,并且提供了丰富的功能,如安全、事务处理等。 4. **Hibernate的工作原理**: Hibernate是一个流行的ORM(对象关系映射)框架,简化了...
通过对这些源代码的学习和实践,开发者不仅可以掌握Java Web的基础知识,还能深入理解各个框架的内部工作原理和最佳实践,这对于提升Java Web开发技能和解决实际问题大有裨益。在实际工作中,开发者可以根据项目的...
采用二位运算能够使得权限运算更加快捷,而且极大 降低 session存储量,有效利用服务器资源. .系统中通过 cxf webservice引擎,将统计服务对外公开,可实现第三方系统的无 缝整合. .利用aop + scheduler 采用动态表...
5. **缓存与队列技术**:使用Redis、ActiveMQ和Ehcache,提升系统性能和响应速度,例如Redis用于模拟session和实现单点登录,ActiveMQ处理消息队列,Ehcache则用于缓存。 6. **搜索引擎**:熟悉ElasticSearch,用于...
Java 面试题知识点总结 ...* WebService 的主要技术亮点:WebService 是基于SOAP或RESTful的,常用的框架有 Axis、CXF 等。 * Tomcat 服务器:如何基于 JNDI 技术配置数据库连接池,如何在 Tomcat 中嵌入一个测试项目。
在DAO实现类中,我们可以借助Hibernate提供的Session接口进行CRUD(Create、Read、Update、Delete)操作。 在SpringBoot的主配置类中,我们可以通过`@EnableJpaRepositories`、`@EntityScan`和`@SpringBoot...
1. **xfireDemo**:XFire是早期的一个SOAP服务框架,现在已被Apache CXF所取代。xfireDemo可能包含了一个使用XFire创建和消费Web服务的示例,帮助开发者了解如何在Java Web应用中实现服务接口和调用。 2. **Struts2...
她还运用Redis缓存来优化首页广告位的展示,使用ActiveMQ进行商品索引同步,使用FreeMarker进行商品详情页的静态化展示,同时将Session信息存储到Redis缓存服务器中,确保了数据共享和系统性能的提升。 此外,郑...
<param-name>singleSession <param-value>true ``` 通过以上配置,我们可以实现基于Flex的Java项目中三种通讯方式的配置与整合。每种通讯方式都有其适用场景:AMF适用于高性能、低延迟的应用场景;Service...