本文讲述了J2EE+Flex的一些开发心得。作者一直是搞J2EE的,使用了blazeds,Flex通过RemoteObject调用Java的后台方法。这样的一个最大的好处就是不再需要struts这样之类的框架了,可以直接使用spring中的bean。
AD:
最近学习了下Flex,我一直是搞J2EE的。所以想整合试着开发,J2EE+Flex在网上查了些资料,有好几种方法。我这里使用的是blazeds,Flex通过RemoteObject调用Java的后台方法。我个人觉得这样的一个最大的好处就是不再需要struts这样之类的框架了,可以直接使用spring中的bean。要使用spring就必须先说下spring的整合问题,其实这个网上也有,只要就是一个SpringFactory类,这个类要实现FlexFactory接口,然后在WEB-INF/flex/services-config.xml中注册改factory。代码如下:
- < factories>
-
< factory id="springContext" class="com.wangmeng.flex.SpringFactory">< /FACTORY>
-
< /FACTORIES>
这样配置好以后在WEB-INF/flex/remote-config.xml中只要把factory的名字写成和上面配置对应的名字如:springContext,source的值配置为spring中bean的id就可以了。例如:
- < destination id="userLoginService">
-
< properties>
-
< factory>springContext< /FACTORY>
-
userLoginService< /SOURCE>
-
< /PROPERTIES>
-
< /DESTINATION>
具体SpringFactory类的源代码网上也有。
下面我说下我构思的控制菜单及权限的方法:首先要控制肯定要有用户登录的环节,这里具体怎么实现都可以,当时登陆后要将用户的信息保存在session中,一遍在检查权限是使用。获取request,session都是通过flex.messaging.FlexContext提供的静态方法
首先说菜单的控制,当用户打开首页,客户端远程调用加载菜单信息,当然这是没有登陆,只有一些公开的菜单可以看见,用户登录后可以再重新加载菜单,这是系统会根据用户的特权等级决定要返回的菜单列表(这里菜单的返回的数据来源你可以自己决定,可以放在数据库里也可以是其他的)。
当然,只是这样控制肯定不够安全,那就是后面要说的对用spring中bean调用的控制:
要控制spring中的bean不被越权调用当然要从前面的SpringFactory类着手啦,我们需要在每次调用bean之前通过bean的名字检查该用户是否有权调用,如果有权调用就返回该bean,如果没有权限就抛出一个没有权限的ServiceException类。还是具体看下我的实现代码吧,也许不是很优美,但是功能大致都实现了。
- package com.wangmeng.flex;
-
-
import java.util.HashMap;
-
import java.util.List;
-
-
import javax.servlet.http.HttpSession;
-
-
import org.springframework.context.ApplicationContext;
-
import org.springframework.web.context.support.WebApplicationContextUtils;
-
import org.springframework.beans.BeansException;
-
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-
-
import com.wangmeng.web.data.SysPrivilege;
-
import com.wangmeng.web.data.User;
-
import com.wangmeng.web.service.privilege.PrivilegeService;
-
-
import flex.messaging.FactoryInstance;
-
import flex.messaging.FlexFactory;
-
import flex.messaging.config.ConfigMap;
-
import flex.messaging.services.ServiceException;
-
-
public class SpringFactory implements FlexFactory {
-
private static final String SOURCE = "source";
-
private static HashMap beanMap = new HashMap();
-
-
-
-
public void initialize(String id, ConfigMap configMap) {
- ApplicationContext appContext = WebApplicationContextUtils
- .getWebApplicationContext(flex.messaging.FlexContext
- .getServletConfig().getServletContext());
- PrivilegeService priviService = (PrivilegeService) appContext
-
.getBean("sysPrivilegeService");
- List priviList = priviService.listAll();
-
for (Object obj : priviList) {
- SysPrivilege privi = (SysPrivilege) obj;
- String name = privi.getServiceName();
- beanMap.put(name, privi);
- }
- }
-
-
public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {
-
SpringFactoryInstance instance = new SpringFactoryInstance(this, id,
- properties);
- instance.setSource(properties.getPropertyAsString(SOURCE, instance
- .getId()));
-
return instance;
- }
-
-
public Object lookup(FactoryInstance inst) {
- SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
-
return factoryInstance.lookup();
- }
-
-
static class SpringFactoryInstance extends FactoryInstance {
- SpringFactoryInstance(SpringFactory factory, String id,
- ConfigMap properties) {
-
super(factory, id, properties);
- }
-
-
public String toString() {
-
return "SpringFactory instance for id=" + getId() + " source="
-
+ getSource() + " scope=" + getScope();
- }
-
-
-
-
public Object lookup() {
- String beanName = getSource();
- SysPrivilege privi = (SysPrivilege) beanMap.get(beanName);
-
boolean hasRight = false;
-
if (privi==null||privi.getLevel() <= 0) {
-
hasRight = true;
-
} else {
- HttpSession session = flex.messaging.FlexContext
- .getHttpRequest().getSession();
-
User user = (User) session.getAttribute("user");
-
if (user != null && user.getPrivilege() >= privi.getLevel()) {
-
hasRight = true;
-
} else {
-
hasRight = false;
- }
- }
-
if (hasRight) {
- ApplicationContext appContext = WebApplicationContextUtils
- .getWebApplicationContext(flex.messaging.FlexContext
- .getServletConfig().getServletContext());
-
try {
-
return appContext.getBean(beanName);
-
} catch (NoSuchBeanDefinitionException nexc) {
-
ServiceException e = new ServiceException();
-
String msg = "Spring service named '" + beanName
-
+ "' does not exist.";
- e.setMessage(msg);
- e.setRootCause(nexc);
- e.setDetails(msg);
-
e.setCode("Server.Processing");
-
throw e;
-
} catch (BeansException bexc) {
-
ServiceException e = new ServiceException();
-
String msg = "Unable to create Spring service named '"
-
+ beanName + "' ";
- e.setMessage(msg);
- e.setRootCause(bexc);
- e.setDetails(msg);
-
e.setCode("Server.Processing");
-
throw e;
- }
-
}else{
-
ServiceException e = new ServiceException();
-
String msg = "你没有足够的权限调用'"
-
+ beanName + "' ";
- e.setMessage(msg);
-
e.setRootCause(null);
- e.setDetails(msg);
-
e.setCode("Server.Processing");
-
throw e;
- }
- }
- }
-
- }
代码不是很难,稍微看下我想应该没有问题。这就是我的构思,如果真的要应用还有许多细节要考虑,至少一个大致的框架完成了。
分享到:
相关推荐
《J2EE+Flex+BlazeDS 配置实践详解》 在当今互联网技术日新月异的时代,企业级应用开发对于交互性和实时性的需求日益增强。Java 2 Enterprise Edition (J2EE) 作为后端开发的强大平台,与Adobe Flex前端框架的结合...
为了尊重原作者 紧用来java+flex小菜鸟学习使用 此项目使用 JAVA JDK1.6 Tomcat6.0/7.0 java+flex4 使用的是BlazeDS方式中得 remoting方式与JAVA交互 由于没有美工 UI十分丑陋望学者见谅 目前功能只实现了这些 ...
至此,你已经成功配置了一个J2EE+Flex+Blazeds的实例。通过Flex客户端发送请求到Blazeds,Blazeds再转发给J2EE服务器处理,服务器响应后再通过Blazeds返回给Flex客户端显示结果。这种架构为开发交互性强、用户体验...
在这个“j2ee+FLEX实现在线拍照”的项目中,Flex将提供拍照和图像处理的功能,用户可以直接在Web浏览器中进行拍照或选择本地图片上传;而后端的J2EE服务器则处理图片上传、存储和可能的进一步处理。 为了实现这一...
【J2EE+FLEX+LCDS实现数据通信详解】 在当今的Web开发中,Java企业版(J2EE)和Adobe Flex经常被结合使用来构建富互联网应用程序(RIA)。Flex作为客户端的用户界面技术,而J2EE则作为后端服务提供数据支持。...
《开发者突击:Java Web主流框架整合开发(J2EE+Struts+...随书附赠光盘内容包括《开发者突击:Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)》10种架构原型程序包、个人通讯录及办公自动化系统源程序。
配置Flex4+J2EE+Blazeds的JSP Web工程步骤如下: 1. **环境准备**:首先,确保安装了Adobe Flex SDK、Java JDK、Eclipse IDE(带有Flex和Java插件)、Tomcat或其他J2EE服务器,以及Blazeds库。 2. **创建Flex项目*...
Wrox+-+Expert+One-on-One+J2EE+Design+and+Development
开发者突击:Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)(第2版)的完整版本,带封面和目录、前言,一共六个压缩文件,这是第6个。
开发者突击:Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)(第2版)的完整版本,带封面和目录、前言,一共六个压缩文件,这是第4个。
开发者突击:Java Web主流框架整合开发(J2EE+Struts+Hibernate+Spring)(第2版)的完整版本,带封面和目录、前言,一共六个压缩文件,这是第3个。
资源名字:基于java+J2EE+sqlserver的在线考试系统设计与实现(源码+文档)_java_J2EE_BS架构_在线考试系统.zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 适合...
Flex + J2EE + BlazeDS 配置是一个用于构建富互联网应用程序(RIA)的技术组合,它将客户端的Flex界面与服务器端的Java EE服务紧密结合。本文将详细介绍如何配置这一技术栈,帮助开发者快速上手。 首先,我们需要...
最后,《J2EE+WEB端知识及案例使用顺序.pdf》可能是对整个学习路径的指导,它可能建议了一个逐步学习的顺序,从基础概念到高级主题,再到具体的案例实践,帮助读者系统地掌握J2EE和Web开发技能。 总结来说,这个...
《基于Flex + J2EE + SH的电子作业管理系统详解》 在信息技术日新月异的今天,电子作业管理系统已经成为教育领域的重要工具,它为教师和学生提供了便捷的在线作业提交与批改平台。本文将详细解析一个以"Flex + J2EE...
本文将深入探讨“j2ee+JSP树型菜单组件tigra_menu”,并围绕其核心概念、功能及应用进行详细介绍。 首先,我们要理解的是“j2ee”(Java 2 Enterprise Edition)是一个企业级的Java开发平台,它提供了各种服务和...
J2EE+设计开发编程指南 J2EE+设计开发编程指南 J2EE+设计开发编程指南
Expert+One-On-One+J2Ee+Design+And+Development.chm