`

Flex控制session方法(转)

阅读更多

Flex控制session方法

 

1、在web.xml增加

<filter>
   <filter-name>AMFContextFilter</filter-name>
   <filter-class>soft.flex.context.AMFContextFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>AMFContextFilter</filter-name>
   <servlet-name>MessageBrokerServlet</servlet-name>
</filter-mapping>

2、增加AMFContextFilter文件

package soft.flex.context;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AMFContextFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws ServletException, IOException {

   AMFContext.setCurrentContext((HttpServletRequest) request,
     (HttpServletResponse) response);

   chain.doFilter(request, response);
}

public void init(FilterConfig arg0) throws ServletException {
   // TODO Auto-generated method stub

}

public void destroy() {
   // TODO Auto-generated method stub

}

}
3、增加AMFContext文件

package soft.flex.context;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AMFContext {

/**
* ThreadLocal object for storing object in current thread.
*/
@SuppressWarnings("unchecked")
private static ThreadLocal tl = new ThreadLocal();

/**
* Set current context
*
* @param request
*            The HttpRequest object
* @param response
*            The HttpResponses object
*/
@SuppressWarnings("unchecked")
static public void setCurrentContext(HttpServletRequest request,
    HttpServletResponse response) {
   AMFContext c = getCurrentContext();
   if (c == null) {
    c = new AMFContext(request, response);
    tl.set(c);
   } else {
    c.setRequest(request);
    c.setResponse(response);
   }
}

/**
* Get current context value
*
* @return The current context
*/
static public AMFContext getCurrentContext() {
   return (AMFContext) tl.get();
}

// ----------------------------------------------------------
//
// Class members
//
// ----------------------------------------------------------

/**
* The http request object. The lifecycle of the request object is defined
* as the request scope. It may be reused in another incoming connection, so
* dont use it in another thread.
*/
private HttpServletRequest request;

/**
* The http response object. The lifecycle of the response object is defined
* as the request scope. Dont use it in another thread. Also dont write
* output to the response when it is used in the context, but you may get or
* set some response header when it is safe.
*/
private HttpServletResponse response;

/**
* The constructor is private, to get an instance of the AMFContext, please
* use getCurrentContext() method.
*
* @param request
* @param response
*/
private AMFContext(HttpServletRequest request, HttpServletResponse response) {
   this.request = request;
   this.response = response;
}

/**
* Get request object
*
* @return Http request object
*/
public HttpServletRequest getRequest() {
   return request;
}

/**
* Set request object
*
* @param Http
*            request object
*/
public void setRequest(HttpServletRequest request) {
   this.request = request;
}

/**
* Get response object
*
* @return Http response object
*/
public HttpServletResponse getResponse() {
   return response;
}

/**
* Set response object
*
* @param response
*            Http response object
*/
public void setResponse(HttpServletResponse response) {
   this.response = response;
}

/**
* Get the servlet context
*
* @return
*/
public ServletContext getServletContext() {
   HttpSession session = this.getSession();
   return session.getServletContext();
}

/**
* Get the current running session
*
* @return
*/
public HttpSession getSession() {
   return request.getSession();
}

/**
* Get an object stored in the session.
*
* @param attr
*            Attribute Name
* @return The value stored under the attribute name.
*/
public Object getSessionAttribute(String attr) {
   HttpSession session = this.getSession();
   return session.getAttribute(attr);
}

/**
* Store an object in the session.
*
* @param attr
*            Attribute Name
* @param value
*            The value.
*/
public void setSessionAttribute(String attr, Object value) {
   HttpSession session = this.getSession();
   session.setAttribute(attr, value);
}

/**
* Get an object stored in the servlet context.
*
* @param attr
*            Attribute Name
* @return The value stored under the attribute name.
*/
public Object getContextAttribute(String attr) {
   ServletContext sc = this.getServletContext();
   return sc.getAttribute(attr);
}

/**
* Store an object in the servlet context.
*
* @param attr
*            Attribute Name
* @param value
*            The value.
*/
public void setContextAttribute(String attr, Object value) {
   ServletContext sc = this.getServletContext();
   sc.setAttribute(attr, value);
}

/**
* Get an object stored in the current request.
*
* @param attr
*            Attribute Name
* @return The value stored under the attribute name.
*/
public Object getRequestAttribute(String attr) {
   return request.getAttribute(attr);
}

/**
* Store an object in the current request.
*
* @param attr
*            Attribute Name
* @param value
*            The value.
*/
public void setRequestAttribute(String attr, Object value) {
   request.setAttribute(attr, value);
}

}

4、增加FlexSessionInterceptor文件

package soft.flex.context;

import javax.servlet.http.HttpServletRequest;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

import soft.common.util.Constants;

public class FlexSessionInterceptor implements MethodInterceptor {

public Object invoke(MethodInvocation invocation) throws Throwable {

   AMFContext context = AMFContext.getCurrentContext();
   HttpServletRequest request = context.getRequest();
   if (request.getSession().getAttribute(Constants.LOGIN_USER_INFO) == null) {
    throw new Exception("Session超时,请您重新登陆!");
   }
   return invocation.proceed();
}
}

5、在applicationContext.xml增加以下内容

<!-- 配置SessionAdvice -->
<bean id="sessionAdvice" class="soft.flex.context.FlexSessionInterceptor" />

    <!-- 配置自动代理 -->
    <bean id="beanNameAutoProxyCreator"
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames">
       <list>
        <value>formDesignerService</value>
       </list>
    </property>
    <property name="interceptorNames">
       <value>sessionAdvice</value>
    </property>
    </bean>

这样子的话,在所有的flex请求中都会先执行FlexSessionInterceptor类中的invoke方法如果要在任何java类中获取sessionr的话,使用AMFContext.getCurrentContext().getSession()即可

分享到:
评论

相关推荐

    FLEX最强增删改查

    控制器会调用相应的服务方法,该方法利用Hibernate的Session接口创建新的实体对象并保存到数据库。 2. **删除(Delete)**:用户选择要删除的条目,Flex发送包含ID的请求到Spring的Delete接口。控制器根据ID找到...

    Myeclipse整合flex4搭建java的Web项目

    1. `&lt;listener&gt;`标签定义了一个监听器`flex.messaging.HttpFlexSession`,用于支持Flex通信的session。 2. `&lt;servlet&gt;`标签定义了名为`MessageBrokerServlet`的servlet,它是Blazeds的核心,处理与Flex客户端的通信...

    ssh+flex+blazed

    - 它包括一系列组件,如MessageBrokerServlet、HTTP Flex Session、Remoting服务等,用于实现远程方法调用、消息代理和数据推送。 4. **集成过程**: - 创建一个J2EE Web工程,如`Sample`,作为后端服务的基础。 ...

    flex中的UserInfoSys源码

    例如,UserService可能会有一个saveUser(User user)方法,通过Session的save()或saveOrUpdate()方法将用户信息持久化到数据库。 Flex客户端与服务端的交互主要基于AMF(Action Message Format),这是一种高效的...

    FLEX和spring、hibernate的集成

    当涉及到与Hibernate的集成时,Spring提供了对Hibernate的全面支持,可以管理SessionFactory和Session。在配置文件中,我们可以定义数据访问层的bean,比如`SessionFactory`,并利用Spring的事务管理功能来处理...

    ssh+flex配置

    10. **部署描述符** (`web.xml`):这是Java Web应用程序的核心配置文件,定义了过滤器、监听器、Servlet等元素,控制着应用的启动和运行行为。 通过以上配置,开发者可以创建一个强大的、灵活的Web应用程序,具有...

    flex平台设计说明书

    - 支持从Session中获取当前用户和访问级别信息,便于权限控制。 - 提供了方便的方法将请求参数映射到对象属性,简化了数据绑定过程。 **3.2 BaseBusiness的角色与功能** - **设计原则:** - 业务逻辑集中管理,...

    Flex + hibernate+sturts +lcd 增删查改1

    4. 使用Hibernate的Session接口进行数据库操作,如Session.save()、Session.load()、Session.update()和Session.delete()。 5. 结果封装为XML或JSON格式,通过Struts返回给Flex。 6. Flex接收到响应后更新UI。 深入...

    FLex 服务器端:配置remote-config.xml.docx

    通过定义目的地和指定方法访问权限,我们可以精细控制Flex应用程序与后端Java服务的交互,确保安全性和性能。在实际开发中,根据项目的具体需求,灵活调整`remote-config.xml`的配置,可以实现各种复杂的远程服务...

    Spring MVC+BlzeDS+Flex框架实践:HelloWorld篇

    Spring MVC+BlazeDS+Flex框架实践:HelloWorld篇是一个典型的多层架构示例,它结合了Spring MVC作为后端控制器、BlazeDS作为数据通信中间件,以及Flex作为前端展示技术。本实践旨在帮助开发者了解如何将这些技术集成...

    Flex+hibernate+spring整合

    5. **Model-View-Controller(MVC)**:Spring的MVC模式使得前端Flex和后端业务逻辑之间有清晰的分隔,Flex负责视图和用户交互,Spring负责控制流程和业务逻辑。 6. **数据绑定**:Flex与Hibernate整合后,可以利用...

    FLEX:集成Spring+Hibernate

    在Flex客户端,我们可以创建RemoteObject,指定其目标为Spring的bean,这样就可以调用后端的方法并处理返回的数据。 安全方面,Spring Security或Acegi(Spring的早期安全模块)可以用来保护应用的资源,提供认证和...

    flex+S2SH整合登录

    6. DAO层:创建`UserDAO.java`,包含具体的数据访问操作,如`findUserByUsernameAndPassword`方法。 五、Flex客户端开发 1. 使用FlashBuilder创建Flex项目,与后端的Struts2 Action进行通信,通常通过AMF(Action ...

    Flex4+struts2+hibernate例子

    Struts2允许开发者将业务逻辑与视图和控制层分离,提供了一套灵活的拦截器和插件机制。在这个示例中,Flex4发送的HTTP请求会被Struts2拦截并处理,执行相应的登录验证逻辑,如检查用户名和密码是否匹配。 **...

    Flex 开发架构

    - 在Cairngorm基础上进一步改进,使用FrontController模式可以更好地控制请求处理流程,提高系统的灵活性和可维护性。 5. **轮回转世—Mate样例** - Mate框架提供了一种更加轻量级的选择,适用于那些不需要...

    flex4 spring3 hibernate3 示例下载

    6. 控制器层:Spring MVC的Controller类,负责处理Flex发送的HTTP请求,调用服务层方法,并返回响应数据。 7. 测试:可能包含单元测试和集成测试,验证各层的功能和协作。 这个示例项目可以帮助初学者理解如何在...

    Flex+spring+hibernate整合视频part_1

    4. **建立数据访问层**:使用Hibernate的SessionFactory和Session接口,通过注解或XML映射文件来实现对象与数据库表之间的映射。 5. **Spring与Hibernate整合**:将Hibernate的SessionFactory注入到Spring中,通过...

    Flex3 界面布局教程 第二篇

    总而言之,Flex 3界面布局教程第二篇深入介绍了Form和Grid这两种布局容器的使用方法和实现示例。通过对这两种布局方式的学习和实践,开发者可以更好地掌握Flex 3在界面布局方面的高级应用。Flex 3布局容器的灵活性和...

    IT技术文章示例

    利用BlazeDS,Flex客户端可以订阅Java服务器上的事件,实时获取更新数据,同时也可以调用服务器端的业务逻辑方法。 ### 10. ASP.NET的线程同步问题 ASP.NET是Microsoft提供的一种Web开发框架,它使用线程池来处理...

Global site tag (gtag.js) - Google Analytics