`

JAVA(ssh2框架)+Flex实现权限控制方案分析

    博客分类:
  • Flex
 
阅读更多

 

目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在FlexJSP并存的情况,所以权限系统需要进行修改。

SSH2权限系统的实现机制】

权限控制分为页面和后台两块:不同类型用户的帐号分配的访问权限是不同的,用户使用帐号登录系统以后,在页面中只能看到拥有权限的页面,并且如果用户通过浏览器直接输入链接地址,后台会判断该用户是否拥有该权限,如果没有则拒绝用户的请求。比如有个人信息管理和交易管理两个模块,管理员给用户A创建了一个帐号,并且给该帐号分配了可访问“个人信息管理”模块的权限,那么用户A登录系统后就只能看到“个人信息管理”的页面,“交易管理”页面是看不到的。那么用户可能知道访问“个人信息管理”的路径,可以在浏览器中输入请求地址,这时后台spring aop截获请求,然后判断该用户是否拥有该模块的访问权限,如果没有则抛出“没有权限”的错误消息,再通过拦截器控制直接返回到页面。

页面实现权限控制的方式比较简单:登录成功后将该用户拥有的所有权限放入session中,用户访问JSP页面时,从session中取得权限,然后在onload事件中遍历页面标签与session中的权限比对,判断标签是否有效,如果无效就不显示或者设为disable,如果有效则显示给用户。

后台实现权限控制使用了拦截器和AOP等机制:AOP过滤访问权限,无权限则抛出异常;拦截器捕获异常,最后返回相应错误消息到页面。

Spring AOP在用户访问Action某方法之前验证该用户是否拥有访问该方法的权限,如果可访问则放行,否则抛出无权限的自定义异常,随后Struts2拦截器会捕获异常,并且把“无访问权限”的错误消息发送的页面。

 

/**
	 * about version :1.00
	 * Description :检查权限
	 * @throws Throwable 
	 */
	public Object checkPriv(ProceedingJoinPoint pjp) throws Throwable{	
		
		//获取当前请求的用户信息和请求路径
		user = ...
		accessUrl = ...
		//调用检查权限的方法,如果验证通过则允许继续执行,否则抛出无权限的异常
		if (service.hasPriv(user, accessUrl)) {
			return pjp.proceed();
		} else {
			throw new FunctionException(Constant4OSPMSException.NO_PRIVILEGE, "user has not privilege to do this!");
		}
	}
	
	private PrivCtrlService service;
	/**
	 * @return the service
	 */
	public PrivCtrlService getService() {
		return service;
	}

 

拦截器是Struts2框架的核心,从页面发送请求到后台以及从后台返回消息到页面都会经过拦截器,其功能类似于filter。在自带的拦截器内再包一层异常拦截器,如果项目发送异常,在自定义拦截器中捕获异常信息,并且根据异常id返回相应的异常消息。

 

 

  • FlexJava整合

关于FlexJava整合都说烂了:HttpServiceWeb ServiceRemoteObject

HttpService等同于JSP中的Ajax请求,向服务器发送请求地址,然后通过Action返回响应数据,最后通过回调的形式获取Action的响应数据。这种形式可以延续使用Struts2,但是需要重新做一套针对Flex调用的Action(因为是Ajax,没法以return的形式重定向了)

Web Service除非跨语言、跨项目,通常不常用。

RemoteObject直接调用Java类中的方法,这种方式不直接依赖于Servlet容器,使用中间件(如BlazeDS)实现双方的通信。

  • Flex权限解决方案

针对Flex权限对接有两种方案:

方案一:所有Flex请求均以Http形式访问Java服务,这样请求依然通过Struts2,原SSH2权限依然可用。使用此方案则当前项目MVC代码基本全部废弃,因为目前项目使用了大量表单提交、重定向,这些对Flex均不实用,全部都得改成Ajax形式通过PrintWriter输出数据给Flex

    方案二:通过RemoteObject形式直接调用Java方法,再通过回调函数获取Java返回的数据。使用此方案则当前项目可以脱离Struts2,直接调用业务逻辑层(Service层)代码即可。但是权限需要再做一套针对ServiceAOP拦截,同时因为开发成员水平不同,对业务层与表示层的耦合关系理解有差异,有些业务功能可能是写在表示层,所以Service的代码也需要进行一定的修改整合。
     针对Flex权限验证的Spring AOP代码如下:
public Object checkPriv(ProceedingJoinPoint pjp) throws Throwable{
		//通过session获取权限的数据
		FlexSession session = FlexContext.getFlexSession();
		String privUrl = (String) session.getAttribute(Constant4Login.PRIVILEGE_SESSION);
		
		if(privUrl==null){
			System.out.println("Session失效...");
			//抛出异常信息
			throw new RuntimeException(…);
		}
		
		//获取切入的方法名
		String methodName = getMethodName(pjp);
		//获取切入的类全名
		String className = getDeclaringClass(pjp);
		//累全名和方法名拼接起来作为权限校验规则
		methodName = className+"."+methodName;
		//获取权限资源
		String privs[] = privUrl.split("@");
		for (String string : privs) {
			//如果拥有权限则直接通过...
			if(isEQuals(string, methodName)){
				System.out.println("权限通过....");
				return pjp.proceed();
			}
		}
		System.out.println("权限未通过...");
		//抛出无权限异常
		throw new RuntimeException(…);
	}
 
Flex端通过RemoteObject监听异常消息:
remote.addEventListener(FaultEvent.FAULT,error_);
private function error_(event:FaultEvent):void{
	Alert.show(event.toString());
}
 优劣分析:
    方案一:[]可以沿用现今的SSH2权限系统   []Action需要重新定制,运行效率相对慢。

 

    方案二:[]运行效率快    []如何与struts2混用(即有的使用jsp、有的使用flex)可能存在jsp请求后台时出现超过两次的权限校验的情况(两套AOP),业务层代码可能需要重构。
  • 大小: 45.7 KB
  • 大小: 91.9 KB
  • 大小: 39.9 KB
  • 大小: 4.6 KB
1
0
分享到:
评论
1 楼 xqchuan 2012-06-26  
[/b]塔顶载[b]

相关推荐

    SSH框架下实现的Flex登录功能

    综上所述,"SSH框架下实现的Flex登录功能"涉及到的技术栈广泛且深入,涵盖了从前端交互到后端数据处理的全过程,是Java Web开发的一个典型应用场景。通过这个项目,开发者可以学习到如何整合多种技术,构建一个完整...

    oa.rar_flex ssh oa_java oa_ssh权限管理

    通过SSH框架中的Spring Security,可以实现细粒度的权限控制,比如按角色分配权限,限制对敏感数据的访问,确保系统的安全性。 6. 人员与组织机构管理:这部分功能涵盖了员工信息管理、部门结构设置、职位分配等。...

    FLEX+SSH某水源检测系统完整代码(带登录界面权限控制)

    综合来看,这个项目涵盖了从前端交互到后端业务处理,再到数据库操作的完整流程,对于学习和理解Flex与SSH框架的集成应用,以及Web应用的权限控制机制有着很好的实践意义。开发者可以通过研究这个项目来提升自己的...

    ssh嵌入flex实现在线拍照,并付图片预览

    Flex可以通过AMF(Action Message Format)或XML/JSON等数据交换格式,与SSH框架中的服务接口进行通信,实现实时更新预览图片。 此外,为了提高用户体验,前端可能还需要实现一些附加功能,如调整摄像头参数(如...

    flex 与 java通信 并运用SSH框架

    flex3 与 JAVA 通信 并且运用 strust2V2.16 + hibernate3.2 +spring2.5 实例 由于我的上传权限太小 那些jar 有需要可以跟我联系 QQ 826785300

    flex ssh2整合案例

    "flex ssh2整合案例"是一个具体的项目,展示了如何将Flex前端、Spring、Struct2后端以及Hibernate持久化层进行融合,实现一个完整的Web应用解决方案。以下是这个案例涉及的关键知识点的详细解析: 1. **Flex**:...

    flex4+ssh做的一个oa系统

    开发这样的系统需要对Flex4的组件库、事件模型和数据绑定有深入理解,同时也要熟悉Java的SSH框架以及数据库设计。团队协作中,前端和后端开发者需要密切配合,确保数据模型的一致性,以及接口调用的正确性。 总的来...

    SSH 短信系统 SSH 短信系统

    SSH框架是Java Web开发中常用的一种模型-视图-控制器(MVC)架构模式,它将业务逻辑、数据访问和用户界面分离,使得开发过程更加模块化,提高了代码的可读性和可维护性。 Spring框架是SSH的核心,它提供了一个全面...

    非常经典java求职简历.docx

    - 博鑫汽车贸易有限公司OA系统:同样基于SSH框架,涵盖多模块功能,如公文流转、权限系统等,使用Jxl处理Excel,实现了高效的公文流转功能。 - 成都敬业房产公司会员管理系统:前后台分离,会员可通过会员卡号访问...

    公司人事管理系统(ss2h)

    1. **SSH框架**:SSH是Java Web开发中的三大框架,Struts2负责MVC模式中的Action层,提供业务逻辑处理;Spring则负责整体的依赖注入(DI)和面向切面编程(AOP),以及事务管理,提升系统的可扩展性和可维护性;...

    JavaEye论坛热点月报 总第7期

    7. **SSH(Struts+Spring+Hibernate)插件** - cswish Struts插件的介绍,它为SSH框架带来新的应用体验,简化了开发流程。 8. **贫血模型与领域模型** - 讨论了一个简单的示例,比较了贫血模型(Anemic Domain ...

    java面试资料

    SSH框架组合是Java Web开发中非常流行的一种架构模式,结合了Struts的MVC模式、Spring的IoC和AOP特性以及Hibernate的对象关系映射功能。 - **Struts**: MVC框架,处理视图层逻辑。 - **Spring**: 提供业务逻辑层的...

    非常经典java求职简历三套含项目介绍.pdf

    - **博鑫汽车贸易有限公司OA系统**:同样基于SSH框架,实现了办公自动化功能,如公文流转、权限系统等。在此项目中,开发者使用Jxl处理Excel数据,增加了系统的实用性。 - **成都敬业房产公司会员管理系统**:虽然...

    基于Flex和SSH架构的在线商务咨询管理系统的设计

    SSH(Struts+Spring+Hibernate)是一个开源的Java web开发框架,用于简化企业级应用的开发,通过Struts处理MVC模式的视图和控制层,Spring提供依赖注入和事务管理,Hibernate则负责对象关系映射,实现数据库操作。...

    PMS酒店管理系统信息化平台技术方案书.docx

    该平台采取了先进的技术框架,包括Linux技术、Java-SSH技术框架、开源数据库MySQL或大型数据库Oracle等、富互联网应用RIA技术Flex(Flash Builder)。 PMS酒店管理系统信息化平台的技术特点包括: 1. 云计算与SAAS...

Global site tag (gtag.js) - Google Analytics