Flex中实现session的一个类是FlexContext类,他将session保存在服务端。Flex客户端的每次RPC请求到服务端接口,都需要做session有效性验证,如果验证session失效,则需要按照一点的规则返回失败信息给Flex客户端,以提示客户端如何处理session失效后的流程。
简单例子:
1、web.xml中需要配置session的超时时间
<!-- 配置session超时时间(分钟) -->
<session-config>
<session-timeout>3</session-timeout>
</session-config>
2、JAVA 服务器端RPC服务接口内的session验证代码:session中的"userName"应该由统一登录入口登录成功后保存的值。
//FlexSession是基于HttpSession创建,session也是共享的,如果session超时,则下次请求会重新创建新的session
FlexSession flexSession = FlexContext.getFlexSession();
if(null != flexSession && null != flexSession.getAttribute("userName"))
{
System.out.println("--> message: " + flexSession.toString() + ", name:" + flexSession.getAttribute("userName"));
}
else
{
//利用抛出异常,向客户端发送错误响应,客户端需要监听FaultEvent事件,进行后续处理
throw new Exception("Session失效");
}
3、Flex客户端接受服务器响应的处理流程:
protected function button1_clickHandler(event:MouseEvent):void
{
//自己封装过的获取remote对象的方式,监听FaultEvent事件,接受服务器抛出来的异常
this.remote.getOperation("createDataSet").addEventListener(FaultEvent.FAULT, faultHandler);
this.remote.createDataSet("", "", "", "", "", "");
}
/**
* 处理服务器响应异常时的流程
**/
private function faultHandler(event:FaultEvent):void
{
var errorMessage:ErrorMessage = event.message as ErrorMessage;
if(errorMessage && errorMessage.rootCause)
{
var errorStr:String = errorMessage.rootCause.message;
//简单的验证方式
if(errorStr.indexOf("Session失效") != -1)
{
Alert.show("Session失效,重新登录!");
}
}
}