`
hanyi366
  • 浏览: 290371 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

FLEX使用remoteobject交互结合spring AOP思想控制项目权限

    博客分类:
  • Flex
 
阅读更多

 

本文介绍如何用FLEX+SPRING 使用remoteobject交互方式, 而不是用HttpService,URLRequest方式控制用户权限。
remoteobject交互效率高, 因此选用该方式开发项目并探讨如何控制权限。

FLEX项目不同于传统的WEB B/S设计,不能像struts那样方便存取权限于session中。

网上有文章介绍可以把用户权限状态存储在FLEX 全局变量中,把安全性的东西放在客户端多少有点不够妥善,
如果FLEX被反编译,造成损失, 后悔也没用啊。。。

这里的思路是把权限通过FlexContext存储在服务器session中, FLEX 调用逻辑业务的时候再从SESSION中调用判断,
如果有很多业务需要调用,一个一个判断不但繁琐, 而且造成代码冗余,
不像struts调用excute或者直接设置拦截器那么方便, 所以使用AOP技术编写拦截器即可判断所有方法的调用权限。


看代码吧:

1.WEB.XML配置
<!-- 这个需要配置, 否则FlexContext将不能得到服务器SESSION-->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>

2.applicationContext.xml配置(考虑使用ProxyFactoryBean配置拦截器, 网上查了很多资料, 但是似乎只能指定一个类,
有知道的朋友请指教:) 向前, 向后拦截器不能控制方法的运行, 所以使用环绕拦截器。
expression中指定的是逻辑层的接口路径, 包括所有的逻辑业务方法, 但需要排除checkLogin方法的拦截,
用“and not”连接指定详细路径。)

<!-- 配置拦截器 (实现权限判断管理功能)-->
<bean id="authInterceptor" class="cn.flex.web.util.AuthPermission">
</bean>
<aop:config>
<aop:aspect id="authI" ref="authInterceptor">
<aop:pointcut id="logicMethods" expression="execution (* cn.flex.logic.service.*.*(..)) and not execution

(* cn.flex.logic.service.UserService.checkLogin(..))"/>
<aop:around pointcut-ref="logicMethods" method="testAuth" />
</aop:aspect>
</aop:config>

下面是后台类代码:

3. 拦截器代码
import org.aspectj.lang.ProceedingJoinPoint;
import flex.messaging.FlexContext;

public class AuthPermission {
public Object testAuth(ProceedingJoinPoint point) throws Throwable {
String user = (String)FlexContext.getFlexSession().getAttribute("userName");
if(user != null){
System.out.println("executing...");
return point.proceed();
}else {
System.out.println("You have no permission...");
return null;
}

}
}

 

4. 逻辑业务管理类代码, 所有与flex交互的类都继承该类, 这样可以方便调用逻辑层的所有业务

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import cn.flex.logic.service.UserService;
import cn.flex.logic.service.base.ServiceManager;
import flex.messaging.FlexContext;

public class BaseLogicImpl {

private ServiceManager srvManager;

public HttpServletRequest getRequest() {

return FlexContext.getHttpRequest();

}

public HttpSession getSession() {

return FlexContext.getHttpRequest().getSession(); //FlexContext.getFlexSession()同理
}

public void setSrvManager(ServiceManager srvManager) {
this.srvManager = srvManager;
}

public UserService getUserService() {
return srvManager.getUserService();
}

}

4. 用户业务逻辑处理代码:


import cn.flex.web.BaseLogicImpl;

public class UserActive extends BaseLogicImpl{

/**
* 用户登陆
* @param name
* @param psw
* @return
*/
public Integer login(String name, String psw) {

Integer result = getUserService().checkLogin(name, psw);
//result整型标识处理接口, 0 为登陆成功, 1为错误, null为用户名不存在.
if(result!=null && result == 0) {
getSession().setAttribute("userName", name);
}

return result;
}

}

5. FLEX主要代码:

private function toLogin():void {
var name:String = ui_name.text;
var psw:String = ui_pass.text;
userSv.login(name, psw);

}


private function loginResult(event:ResultEvent):void {
var data:Object = event.result;
//trace(data);
if(data == 0){
Alert.show("login success.");
showMainFM();
}else if(data == 1){
Alert.show("The password is wrong.");
}else if(data == null ){
Alert.show("The user account doesn't exsit.");
}

}

<mx:RemoteObject id="userSv" destination="userActive"
endpoint="/FlexWeb/messagebroker/amf" >
<mx:method name="login" result="loginResult(event)" />
</mx:RemoteObject>

<mx:Panel id="loginPanel" title="User Login" showEffect="{irisLoginEffect}"
width="300" height="230" creationCompleteEffect=""
layout="absolute" verticalCenter="0" horizontalCenter="0" y="113">
<mx:Canvas borderColor="#ffffff" y="19" x="16.5">
<mx:Label text="UserName:" x="10" y="31"/>
<mx:TextInput id="ui_name" x="87" y="29"/>
<mx:Label text="Password:" x="15" y="70"/>
<mx:TextInput id="ui_pass" x="87" y="68"/>
<mx:Button click="toLogin()" label="确定" x="87" y="101"/>
<mx:Button click="showRegisterFM()" label="注册" x="169" y="101"/>
</mx:Canvas>
</mx:Panel>

分享到:
评论

相关推荐

    spring-flex集成-demo

    Flex是用于创建交互式、高性能的基于Web的用户界面的平台,而Spring则是一个广泛使用的Java后端框架,两者结合能够帮助开发者实现后端业务逻辑与前端展示的无缝对接。 在"spring-flex集成-demo"中,我们可以学习到...

    flex整合spring的例子

    4. **在Flex客户端中消费服务**:在Flex代码中,你可以使用`RemoteObject`组件来调用配置好的远程目的地,并且通过数据绑定或事件处理程序与Spring服务进行交互。 5. **处理数据和异常**:Flex客户端可以接收来自...

    spring整合flex所需jar包

    - 创建Flex客户端:在Flex项目中,使用RemoteObject或HTTPService组件来调用服务器端的Spring服务。配置这些组件以指向BlazeDS的URL和相应的服务名。 - 配置AMF通道:在BlazeDS配置文件中设置AMF通道,以允许Flex...

    flex4+blazeds+spring+hibernate集成

    6. **数据交互**:Flex客户端通过RemoteObject调用Spring Bean的方法,这些方法会触发Hibernate的数据库操作,然后返回结果给Flex应用显示。 集成Flex4、BlazeDS、Spring和Hibernate可以构建出高度互动的前端和强大...

    spring+hibernate+flex整合

    6. **创建Flex项目**:在Flex IDE中新建项目,导入BlazeDS库,配置RemoteObject来连接Spring服务。 7. **编写Flex UI**:设计和实现Flex界面,通过RemoteObject调用Spring服务的方法,实现数据的增删改查。 8. **...

    flex+hibernate+Spring

    - 使用Spring BlazeDS Integration项目,它提供了BlazeDS,一个Flex和Spring之间的消息传递中间件。 - 在Flex客户端,通过AMF(Action Message Format)与Spring服务端进行通信,AMF是一种高效的数据传输格式。 -...

    Flex、Spring整合:Spring BlazeDS Integration

    标题中的“Flex、Spring整合:Spring BlazeDS Integration”指的是在Java后端使用Spring框架与前端Flex应用程序进行集成的一种技术方案。BlazeDS是Adobe提供的一个开源项目,它为富互联网应用(RIA)提供了数据推送...

    SpringFlex框架搭建

    SpringFlex框架搭建是一种将Spring框架与Adobe Flex技术结合的实践,用于构建富互联网应用程序(RIA)。SpringFlex使得后端服务可以方便地与Flex前端交互,提供了强大的数据绑定和远程调用功能。 首先,Spring框架...

    上一篇的flex的远程对象调用,flex和spring集成分页的jar和截图

    描述中提到的“flex和spring集成分页”是指将Flex客户端与Spring框架结合,实现服务器端数据的分页展示。Spring是一个广泛使用的Java企业级应用开发框架,提供IoC(Inversion of Control)容器、数据访问、事务管理...

    Flex Spring JAVA BLAZEDS整合

    【Flex Spring JAVA BLAZEDS整合】是一种技术实践,它将Adobe Flex的前端展示层与Spring框架的后端业务逻辑层紧密结合,利用BlazeDS作为中间件进行数据传输。Flex作为一个强大的RIA(富互联网应用程序)开发平台,常...

    用spring和Flex整合的一个例子

    当Spring与Flex结合使用时,可以实现前后端的高效协作,提供高性能、用户体验优秀的Web应用。 本示例项目“用spring和Flex整合的一个例子”展示了如何将这两个技术结合,以构建一个完整的应用程序。通过使用BlazeDS...

    Using Flex with Spring

    《使用Flex与Spring集成开发详解》 在现代Web应用程序开发中,Flex作为一款强大的富互联网应用(RIA)开发框架,以其丰富的用户界面和强大的交互能力备受开发者青睐。与此同时,Spring框架作为Java企业级应用的事实...

    flex4+spring+blazeds整合技术

    富互联网应用程序(Rich Internet Applications,简称RIA)已经成为一种趋势,而Flex作为Adobe提供的RIA开发框架,结合Spring的优秀企业级服务管理和BlazeDS的数据传输能力,为开发者提供了强大的前后端交互解决方案...

    Flex与Spring java联合开发

    Flex与Spring Java联合开发是一种常见的跨平台应用架构,它结合了Adobe Flex的用户界面优势和Spring框架的强大后端服务管理。这种技术组合使得开发者能够构建富互联网应用程序(RIA),提供丰富的用户体验,同时利用...

    Flex入门源码 远程java访问 spring集成

    Spring是一个广泛使用的Java企业级应用框架,提供依赖注入(DI)、面向切面编程(AOP)等功能。在与Flex集成时,Spring通常作为服务层,为Flex客户端提供业务逻辑和数据访问。Spring还提供了Web服务支持,使得其他...

    spring flex regpro

    Spring Flex Regpro是一个示例项目,它展示了如何将Spring框架与Adobe BlazeDS集成,以便在Java后端和Flex前端之间实现数据的实时交互。这个压缩包文件包含了一个完整的项目实例,帮助开发者理解如何构建这样的应用...

    flex 之java+hibernate+Spring完整配置文档

    - Spring是轻量级的Java EE框架,主要特性包括控制反转(IoC)和面向切面编程(AOP)。 - Spring容器管理应用组件及它们之间的依赖,通过XML配置文件实现解耦。 - Spring提供了事务管理、DAO支持、O/R Mapping...

    flex整合与spring整合 教程

    Flex作为一个强大的RIA(Rich Internet Applications)开发框架,能为用户提供互动性强、图形丰富的Web应用体验,而Spring作为Java领域内广泛使用的轻量级应用框架,提供了诸如依赖注入、事务管理等核心功能,两者...

    Flex Builder3+MyEclipse8.5搭建Flex Spring Hibernate环境

    - **编写Flex代码**:在.mxml文件中,使用`RemoteObject`组件与后端Java服务进行通信,编写按钮事件监听器,调用`sayHelloTo`方法,并显示结果。 **5. 集成Spring和Hibernate** - **导入库**:将Spring和Hibernate...

Global site tag (gtag.js) - Google Analytics