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()即可
分享到:
相关推荐
控制器会调用相应的服务方法,该方法利用Hibernate的Session接口创建新的实体对象并保存到数据库。 2. **删除(Delete)**:用户选择要删除的条目,Flex发送包含ID的请求到Spring的Delete接口。控制器根据ID找到...
1. `<listener>`标签定义了一个监听器`flex.messaging.HttpFlexSession`,用于支持Flex通信的session。 2. `<servlet>`标签定义了名为`MessageBrokerServlet`的servlet,它是Blazeds的核心,处理与Flex客户端的通信...
- 它包括一系列组件,如MessageBrokerServlet、HTTP Flex Session、Remoting服务等,用于实现远程方法调用、消息代理和数据推送。 4. **集成过程**: - 创建一个J2EE Web工程,如`Sample`,作为后端服务的基础。 ...
例如,UserService可能会有一个saveUser(User user)方法,通过Session的save()或saveOrUpdate()方法将用户信息持久化到数据库。 Flex客户端与服务端的交互主要基于AMF(Action Message Format),这是一种高效的...
当涉及到与Hibernate的集成时,Spring提供了对Hibernate的全面支持,可以管理SessionFactory和Session。在配置文件中,我们可以定义数据访问层的bean,比如`SessionFactory`,并利用Spring的事务管理功能来处理...
10. **部署描述符** (`web.xml`):这是Java Web应用程序的核心配置文件,定义了过滤器、监听器、Servlet等元素,控制着应用的启动和运行行为。 通过以上配置,开发者可以创建一个强大的、灵活的Web应用程序,具有...
- 支持从Session中获取当前用户和访问级别信息,便于权限控制。 - 提供了方便的方法将请求参数映射到对象属性,简化了数据绑定过程。 **3.2 BaseBusiness的角色与功能** - **设计原则:** - 业务逻辑集中管理,...
4. 使用Hibernate的Session接口进行数据库操作,如Session.save()、Session.load()、Session.update()和Session.delete()。 5. 结果封装为XML或JSON格式,通过Struts返回给Flex。 6. Flex接收到响应后更新UI。 深入...
通过定义目的地和指定方法访问权限,我们可以精细控制Flex应用程序与后端Java服务的交互,确保安全性和性能。在实际开发中,根据项目的具体需求,灵活调整`remote-config.xml`的配置,可以实现各种复杂的远程服务...
Spring MVC+BlazeDS+Flex框架实践:HelloWorld篇是一个典型的多层架构示例,它结合了Spring MVC作为后端控制器、BlazeDS作为数据通信中间件,以及Flex作为前端展示技术。本实践旨在帮助开发者了解如何将这些技术集成...
5. **Model-View-Controller(MVC)**:Spring的MVC模式使得前端Flex和后端业务逻辑之间有清晰的分隔,Flex负责视图和用户交互,Spring负责控制流程和业务逻辑。 6. **数据绑定**:Flex与Hibernate整合后,可以利用...
在Flex客户端,我们可以创建RemoteObject,指定其目标为Spring的bean,这样就可以调用后端的方法并处理返回的数据。 安全方面,Spring Security或Acegi(Spring的早期安全模块)可以用来保护应用的资源,提供认证和...
6. DAO层:创建`UserDAO.java`,包含具体的数据访问操作,如`findUserByUsernameAndPassword`方法。 五、Flex客户端开发 1. 使用FlashBuilder创建Flex项目,与后端的Struts2 Action进行通信,通常通过AMF(Action ...
Struts2允许开发者将业务逻辑与视图和控制层分离,提供了一套灵活的拦截器和插件机制。在这个示例中,Flex4发送的HTTP请求会被Struts2拦截并处理,执行相应的登录验证逻辑,如检查用户名和密码是否匹配。 **...
- 在Cairngorm基础上进一步改进,使用FrontController模式可以更好地控制请求处理流程,提高系统的灵活性和可维护性。 5. **轮回转世—Mate样例** - Mate框架提供了一种更加轻量级的选择,适用于那些不需要...
6. 控制器层:Spring MVC的Controller类,负责处理Flex发送的HTTP请求,调用服务层方法,并返回响应数据。 7. 测试:可能包含单元测试和集成测试,验证各层的功能和协作。 这个示例项目可以帮助初学者理解如何在...
4. **建立数据访问层**:使用Hibernate的SessionFactory和Session接口,通过注解或XML映射文件来实现对象与数据库表之间的映射。 5. **Spring与Hibernate整合**:将Hibernate的SessionFactory注入到Spring中,通过...
总而言之,Flex 3界面布局教程第二篇深入介绍了Form和Grid这两种布局容器的使用方法和实现示例。通过对这两种布局方式的学习和实践,开发者可以更好地掌握Flex 3在界面布局方面的高级应用。Flex 3布局容器的灵活性和...
利用BlazeDS,Flex客户端可以订阅Java服务器上的事件,实时获取更新数据,同时也可以调用服务器端的业务逻辑方法。 ### 10. ASP.NET的线程同步问题 ASP.NET是Microsoft提供的一种Web开发框架,它使用线程池来处理...