加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService会话Session的管理

发布时间:2020-12-17 00:07:31 所属栏目:安全 来源:网络整理
导读:1、新建Session的WebService测试代码,代码很简单。就是记录用户登录的状态信息,放在MessageContext的ServiceContext中。代码如下: 代码package com.hoo.service;import org.apache.axis2.context.MessageContext;import org.apache.axis2.context.Service

1、新建Session的WebService测试代码,代码很简单。就是记录用户登录的状态信息,放在MessageContext的ServiceContext中。代码如下:

代码package com.hoo.service;

import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceContext;

/**
 * <b>function:</b>WebService Session会话消息
 * @author hoojo
 * @createDate 2011-3-8 下午04:11:27
 * @file LoginService.java
 * @package com.hoo.service
 * @project Axis2WebService
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email hoojo_@126.com
 * @version 1.0
 */
public class LoginService {
	public boolean login(String userName,String password) {
		MessageContext context = MessageContext.getCurrentMessageContext();
		ServiceContext ctx = context.getServiceContext();
		if ("admin".equals(userName) && "123456".equals(password)) {
			ctx.setProperty("userName",userName);
			ctx.setProperty("password",password);
			ctx.setProperty("msg","登陆成功");
			return true;
		}
		ctx.setProperty("msg","登陆失败");
		return false;
	}
	
	public String getLoginMessage() {
		MessageContext context = MessageContext.getCurrentMessageContext();
		ServiceContext ctx = context.getServiceContext();
		return ctx.getProperty("userName") + "#" + ctx.getProperty("msg");
	}
}

这里保存Session信息的主要是通过MessageContext这个上下文来获取ServiceContext的上下文,然后通过setProperty来保存session的信息,通过getProperty来获取session信息。Session的作用可以在使用WebService登录的时候,保存用户的登录状态或是会话消息。但是使用session需要设置发布Service的时候,设置WebService的作用域。作用域默认是request,它还有另外三个值,分别是:application、soapsession、transportsession;我们可以选择使用transportsession和application分别实现同一个WebService类和跨WebService类的会话管理。2、使用axis2的工具生成aar文件,并发布LoginService服务。关于这里发布LoginService的步骤就不一一介绍,上面已经有说过了。当你用这个步骤发布WebService的时候,你可以打开压缩文件的方式aar文件(其实不一定要用aar文件,只是官方推荐的aar,jar文件也是可以的),在META-INF目录下有一个services.xml文件,看到它的<service>这个标签,没有设置scope属性。scope默认的是request,我们得修改services.xml的内容。修改后services.xml内容如下:代码<service name="LoginService" scope="transportsession"><description>Please Type your service description here</description><messageReceivers><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></messageReceivers><parameter name="ServiceClass">com.hoo.service.LoginService</parameter></service>这个地方的scope是关键,如果这里不设置的话session是无法存放信息。3、用控制台Dos命令发布WebService这个是手工打包,也就是我们经常用的jar命令首先我们得需要一个services.xml文件,文件内容如上面的。<service name="LoginService" scope="transportsession">name是当前发布WebService的名称,scope是会话作用域。保存在Session中就要用这个transportsession这个作用域。<parameter name="ServiceClass">com.hoo.service.LoginService</parameter>这个是当前Service的类路径,包名+类名<messageReceivers><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessag


eReceiver"/></messageReceivers>这个应该是参数和返回值信息的解析类,in-only是输入也就是参数,in-out是输出也就是返回值。A、 首先,我们在C盘下新建一个sessionService的目录,然后将上面的services.xml文件中的ServiceClass的类的class文件copy到这个目录下,注意要带上package目录,然后在sessionService目录下新建一个META-INF将上面的services.xml文件放到这个目录下B、 然后运行cmd进入控制台,进入sessionService这个目录,键入命令如下:jar cvf service.aar .service.aar是打包后的文件名称,.是指代当前目录如果你不懂jar命令,你可以输入jar会有命令语法的提示进入sessionService这个目录中,你可以看到service.aar文件就有了。然后将这个文件copy到axis2的WEB-INF目录下的services目录中,也就是[tomcat-home]webappsaxis2WEB-INFservices然后可以通过:http://localhost:8080/axis2/services/listServices就可以查看刚才发布的服务了。这样就完成手工发布打包发布WebService了C、 编写WebService客户端的请求代码代码

?

?

执行后,结果如下:trueadmin#登陆成功上面要说明的是options.setManageSession(true);是开启对Session管理的支持
?

这里保存Session信息的主要是通过MessageContext这个上下文来获取ServiceContext的上下文,然后通过setProperty来保存session的信息,通过getProperty来获取session信息。

Session的作用可以在使用WebService登录的时候,保存用户的登录状态或是会话消息。但是使用session需要设置发布Service的时候,设置WebService的作用域。作用域默认是request,它还有另外三个值,分别是:application、soapsession、transportsession;我们可以选择使用transportsession和application分别实现同一个WebService类和跨WebService类的会话管理。

2、使用axis2的工具生成aar文件,并发布LoginService服务。

关于这里发布LoginService的步骤就不一一介绍,上面已经有说过了。当你用这个步骤发布WebService的时候,你可以打开压缩文件的方式aar文件(其实不一定要用aar文件,只是官方推荐的aar,jar文件也是可以的),在META-INF目录下有一个services.xml文件,看到它的<service>这个标签,没有设置scope属性。

scope默认的是request,我们得修改services.xml的内容。

修改后services.xml内容如下:

<service name="LoginService" scope="transportsession">
	<description>
		Please Type your service description here
	</description>
	<messageReceivers>
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
	</messageReceivers>
	<parameter name="ServiceClass">com.hoo.service.LoginService</parameter>
</service>


这个地方的scope是关键,如果这里不设置的话session是无法存放信息。

3、用控制台Dos命令发布WebService

这个是手工打包,也就是我们经常用的jar命令

首先我们得需要一个services.xml文件,文件内容如上面的。

<service name="LoginService" scope="transportsession">

name是当前发布WebService的名称,scope是会话作用域。保存在Session中就要用这个transportsession这个作用域。

<parameter name="ServiceClass">com.hoo.service.LoginService</parameter>

这个是当前Service的类路径,包名+类名

<messageReceivers>

<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"

class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>

<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"

class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

</messageReceivers>

这个应该是参数和返回值信息的解析类,in-only是输入也就是参数,in-out是输出也就是返回值。

A、 首先,我们在C盘下新建一个sessionService的目录,然后将上面的services.xml文件中的ServiceClass的类的class文件copy到这个目录下,注意要带上package目录,然后在sessionService目录下新建一个META-INF将上面的services.xml文件放到这个目录下

B、 然后运行cmd进入控制台,进入sessionService这个目录,键入命令如下:

jar cvf service.aar .

service.aar是打包后的文件名称,.是指代当前目录

如果你不懂jar命令,你可以输入jar会有命令语法的提示

进入sessionService这个目录中,你可以看到service.aar文件就有了。然后将这个文件copy到axis2的WEB-INF目录下的services目录中,也就是

[tomcat-home]webappsaxis2WEB-INFservices

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读