目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在Flex与JSP并存的情况,所以权限系统需要进行修改。
【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返回相应的异常消息。
关于Flex与Java整合都说烂了:HttpService、Web Service、RemoteObject。
HttpService等同于JSP中的Ajax请求,向服务器发送请求地址,然后通过Action返回响应数据,最后通过回调的形式获取Action的响应数据。这种形式可以延续使用Struts2,但是需要重新做一套针对Flex调用的Action(因为是Ajax,没法以return的形式重定向了)
Web Service除非跨语言、跨项目,通常不常用。
RemoteObject直接调用Java类中的方法,这种方式不直接依赖于Servlet容器,使用中间件(如BlazeDS)实现双方的通信。
针对Flex权限对接有两种方案:
方案一:所有Flex请求均以Http形式访问Java服务,这样请求依然通过Struts2,原SSH2权限依然可用。使用此方案则当前项目MVC代码基本全部废弃,因为目前项目使用了大量表单提交、重定向,这些对Flex均不实用,全部都得改成Ajax形式通过PrintWriter输出数据给Flex。
方案二:通过RemoteObject形式直接调用Java方法,再通过回调函数获取Java返回的数据。使用此方案则当前项目可以脱离Struts2,直接调用业务逻辑层(Service层)代码即可。但是权限需要再做一套针对Service的AOP拦截,同时因为开发成员水平不同,对业务层与表示层的耦合关系理解有差异,有些业务功能可能是写在表示层,所以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
分享到:
相关推荐
综上所述,"SSH框架下实现的Flex登录功能"涉及到的技术栈广泛且深入,涵盖了从前端交互到后端数据处理的全过程,是Java Web开发的一个典型应用场景。通过这个项目,开发者可以学习到如何整合多种技术,构建一个完整...
通过SSH框架中的Spring Security,可以实现细粒度的权限控制,比如按角色分配权限,限制对敏感数据的访问,确保系统的安全性。 6. 人员与组织机构管理:这部分功能涵盖了员工信息管理、部门结构设置、职位分配等。...
综合来看,这个项目涵盖了从前端交互到后端业务处理,再到数据库操作的完整流程,对于学习和理解Flex与SSH框架的集成应用,以及Web应用的权限控制机制有着很好的实践意义。开发者可以通过研究这个项目来提升自己的...
Flex可以通过AMF(Action Message Format)或XML/JSON等数据交换格式,与SSH框架中的服务接口进行通信,实现实时更新预览图片。 此外,为了提高用户体验,前端可能还需要实现一些附加功能,如调整摄像头参数(如...
flex3 与 JAVA 通信 并且运用 strust2V2.16 + hibernate3.2 +spring2.5 实例 由于我的上传权限太小 那些jar 有需要可以跟我联系 QQ 826785300
"flex ssh2整合案例"是一个具体的项目,展示了如何将Flex前端、Spring、Struct2后端以及Hibernate持久化层进行融合,实现一个完整的Web应用解决方案。以下是这个案例涉及的关键知识点的详细解析: 1. **Flex**:...
开发这样的系统需要对Flex4的组件库、事件模型和数据绑定有深入理解,同时也要熟悉Java的SSH框架以及数据库设计。团队协作中,前端和后端开发者需要密切配合,确保数据模型的一致性,以及接口调用的正确性。 总的来...
SSH框架是Java Web开发中常用的一种模型-视图-控制器(MVC)架构模式,它将业务逻辑、数据访问和用户界面分离,使得开发过程更加模块化,提高了代码的可读性和可维护性。 Spring框架是SSH的核心,它提供了一个全面...
- 博鑫汽车贸易有限公司OA系统:同样基于SSH框架,涵盖多模块功能,如公文流转、权限系统等,使用Jxl处理Excel,实现了高效的公文流转功能。 - 成都敬业房产公司会员管理系统:前后台分离,会员可通过会员卡号访问...
1. **SSH框架**:SSH是Java Web开发中的三大框架,Struts2负责MVC模式中的Action层,提供业务逻辑处理;Spring则负责整体的依赖注入(DI)和面向切面编程(AOP),以及事务管理,提升系统的可扩展性和可维护性;...
7. **SSH(Struts+Spring+Hibernate)插件** - cswish Struts插件的介绍,它为SSH框架带来新的应用体验,简化了开发流程。 8. **贫血模型与领域模型** - 讨论了一个简单的示例,比较了贫血模型(Anemic Domain ...
SSH框架组合是Java Web开发中非常流行的一种架构模式,结合了Struts的MVC模式、Spring的IoC和AOP特性以及Hibernate的对象关系映射功能。 - **Struts**: MVC框架,处理视图层逻辑。 - **Spring**: 提供业务逻辑层的...
- **博鑫汽车贸易有限公司OA系统**:同样基于SSH框架,实现了办公自动化功能,如公文流转、权限系统等。在此项目中,开发者使用Jxl处理Excel数据,增加了系统的实用性。 - **成都敬业房产公司会员管理系统**:虽然...
SSH(Struts+Spring+Hibernate)是一个开源的Java web开发框架,用于简化企业级应用的开发,通过Struts处理MVC模式的视图和控制层,Spring提供依赖注入和事务管理,Hibernate则负责对象关系映射,实现数据库操作。...
该平台采取了先进的技术框架,包括Linux技术、Java-SSH技术框架、开源数据库MySQL或大型数据库Oracle等、富互联网应用RIA技术Flex(Flash Builder)。 PMS酒店管理系统信息化平台的技术特点包括: 1. 云计算与SAAS...