说明: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>
分享到:
相关推荐
1. **会话标识符**:Web服务可能会通过请求头或者消息体传递一个唯一的Session ID,以便服务器识别特定的客户端会话。 2. **自定义会话管理器**:可能有一个自定义的会话管理类,该类负责创建、更新和销毁会话,以及...
**Apache Shiro** 是一个强大的安全框架,提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密服务。在本项目中,Shiro被用来实现用户登录验证、权限控制以及角色...
例如,可以使用 `<drools:rulebase>` 和 `<drools:stateful-session>` 元素来定义规则库和状态化会话。 - **事件监听器**(Event Listeners):讲解了如何使用 Spring 的依赖注入功能来配置 Drools 事件监听器,以...
在这个目录中,开发者可以找到关于如何使用HttpSession对象存储和检索数据的示例,同时可能还会涉及到session的管理,如设置超时、会话复制和粘滞会话等。 4. **servlet**:Servlet是Java Web应用程序的核心部分,...
1. **xfireDemo**:XFire是早期的一个SOAP服务框架,现在已被Apache CXF所取代。xfireDemo可能包含了一个使用XFire创建和消费Web服务的示例,帮助开发者了解如何在Java Web应用中实现服务接口和调用。 2. **Struts2...
- **session**: 表示用户的会话,用于存储特定用户的会话信息。 - **application**: 表示应用程序上下文,用于在整个Web应用范围内共享数据。 - **context**: 表示JSP页面的上下文环境,用于访问当前页面的上下文。 ...
`session-config` 部分设置了会话超时时间,即客户端无活动的会话将在60分钟后自动结束。 ```xml <!-- web.xml 配置 --> <description>Apache CXF Endpoint <display-name>cxf <servlet-name>cxf ...
3. **Session管理**:在分布式环境中,Axis2支持会话管理,确保跨多个WebService调用时的数据一致性。 4. **使用Spring的JavaBean发布WebService**:结合Spring框架,可以方便地将JavaBean转换为可发布的WebService...
1. **Servlet技术**:Java Web的核心之一是Servlet,它是一种用于扩展服务器功能的Java类。在01至12的压缩文件中,可能包含了使用Servlet创建动态网页、处理HTTP请求和响应、实现会话管理以及过滤器等应用的示例。 ...
可能包括session beans(会话bean)处理客户端交互,entity beans(实体bean)持久化数据,以及message-driven beans(消息驱动bean)处理JMS消息。 4. **MVC(Model-View-Controller)模式**:J2EE项目常采用MVC...
主要有三种类型:Session Beans(会话bean)、Message Driven Beans(消息驱动bean)和Entity Beans(实体bean)。 4. **JMS(Java Message Service)**:JMS是Java平台上的消息传递标准,允许应用程序创建、发送、...
6. **开发必备**:开发IVR网关时,开发者需要熟悉通信协议,如SIP(Session Initiation Protocol)用于建立和管理多媒体通信会话,以及TSP(Telephony Service Provider)接口,以便与电话网络交互。 7. **文档**:...
EJB可以是会话bean(Session Beans),用于处理客户端请求;实体bean(Entity Beans),用于持久化数据;或者消息驱动bean(Message-Driven Beans),用于处理JMS消息。 3. **Java Message Service (JMS)**:JMS是...
EJB组件包括会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。 4. **EJB与SOAP的结合**:在本项目中,EJB组件可能被用作业务逻辑层,处理复杂的计算或数据操作。SOAP ...
Web应用的会话跟踪技术主要有以下几种:URL重写、隐藏表单字段、Cookies和会话(Session)。URL重写通过在URL后面添加参数来跟踪用户会话,隐藏表单字段通过在表单中添加一个隐藏的字段来存储会话信息,Cookies是...
尽管Xfire已被Apache CXF等更现代的框架取代,但其对`ws-security`的支持仍然展示了如何在实际项目中实现Web服务安全。这可能涉及到配置XML文件,定义安全策略,以及在服务调用中添加必要的安全头信息。 接下来,...
EJB的核心组件包括会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message Driven Beans)。这些bean提供了业务逻辑,并能被远程客户端调用。 WebService是一种基于标准的、平台无关的通信...