-
Struts2如何将权限验证细化到页面的操作5
我最近自己做的一个基础BS架构(Struts2+Jquery+Hibernate),在设计权限验证的时候遇到一个难题,如下.
整个系统以一颗资源树的形式管理page(叶子节点是struts2的action请求),做了一个权限验证拦截器来验证权限。整个过程如下
1.资源树有一个叶子节点 /sys/User_list,用户访问 /sys/User_list的时候,拦截器取到这个URL,然后查找role_resource表(保存role对资源树节的访问权限),可以得到用户对这个page的操作权限 privis,整型
2.假如用户能够访问/sys/User_list,提供给用户是一个User表的操作界面,并根据privis的值生成操作按钮,当用户add,edit,delete的时候,提交的action为 sys/User_add,
sys/User_update,sys/User_delete形式,这个时候也要做权限验证,但我并没有把这些操作细化到资源树的sys/User_list节点page下,
而是用1取到的privis来标记,privis=2,表示可以edit,privis=3,表示可以add,edit,privis=4,表示可以add,edit,delete.
问题在这里,当用户点击按钮提交的时候,拦截器怎么去验证用户的权限呢?
不验证是不行的,用户可以通过直接输入URL绕过按钮,
验证的话,因为这个action不在资源树里,会被拦截器直接拦截掉,
我的问题在于,这种Operation级别的url怎么在拦截器里验证?
1.取到sys/User_add,然后替换成sys/User_list,取到Privis,
然后再privis=3,则通过,否则拒绝
2.或者Struts2的action不使用*_*映射,而是用DMI调用。
这样sys/User_list就替换成sys/User
sys/User_add替换成sys/User!add
当访问sys/User!add的时候,先取到!前的url,然后去role_resource验证,然后然后再privis=3,则通过,否则拒绝,
2种似乎都可行,第2种更明晰一点,但action配置过多,我想用第一种*_*的配置,该如何设计page的url,以及operation的url,以方便权限验证
2012年12月28日 09:29
4个答案 按时间排序 按投票排序
-
按照楼主说的是不是在拦截器中要类似这样的操作:
if (actionType = edit)
判断 privis > 2
if actionType = add
判断 privis >= 3
if actionType = delete
判断 privis = 4
作为权限判断的逻辑。
我有一个想法,简化这个判断的。类似于linux的访问权限的“位与”的方法
设计一个map在拦截器中存储,或能访问到。
"edit" -> 0001
"add" -> 0010
"delete"-> 0100
privis中对应的权限分别为:
edit = 0001
edit,add = 0011
ed,ad,del = 0111
这样在进行权限判断的代码就可以写成if (map.get(actionType) & userPrivis == map.get(actionType)) { //doXXX,已经获得权限后的操作 }
2012年12月28日 23:45
相关推荐
Interceptor是拦截器,用于在Action执行前后进行额外的处理,如权限验证、日志记录等。 使用Struts2时,首先需要在项目中引入Struts2的依赖库,并配置struts2的核心过滤器。通过编写Action类,你可以定义处理特定...
- **INTERCEPTORS(拦截器)**:拦截器是Struts2的重要机制之一,可以在Action执行前后进行拦截,例如用于权限验证、日志记录等功能。 - **值栈与OGNL**:值栈是Struts2中用来存储和传递数据的主要机制,而OGNL...
在实际应用中,这个组合可能还包括数据库脚本,用于存储上传文件的信息,以及任何必要的业务逻辑代码,例如权限验证、文件类型检查、大小限制等。此外,为了实现批量下载,可能会创建一个动态生成的下载页面,一次性...
无论是Struts过滤器还是Spring AOP,都需要注意异常处理和日志记录,以便在权限验证失败时能提供清晰的错误信息,同时方便排查问题。此外,权限设计应遵循最小权限原则,即每个用户仅拥有完成其工作所需的最小权限,...
3. **权限(Permission)**:表示用户可以执行的具体操作,如访问特定页面、执行特定功能等。 设计中,用户通过关联角色来获得权限,而角色与权限之间的关系可以通过权限分配策略进行管理。此外,通过对角色所对应...
总结起来,"细颗粒权限控制"是通过注解和拦截器相结合的方式来实现的,它要求在每个方法上明确权限标识,并在执行前进行实时的权限验证。这种方式既能满足项目经理对权限管理的细化需求,又能有效防止因Session被...
在这个CRM系统中,Struts2可能被用来处理用户交互,如表单提交、页面跳转,并将数据传递给模型层或视图层。 3. **Hibernate框架**:Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)工具,它简化了...
2. **系统复杂度增加:** 为了实现更清晰的结构,Struts将MVC中的Controller部分进一步细化为多个组成部分。虽然这样做有助于提高系统的可维护性和扩展性,但也相应增加了系统的复杂度。 3. **ActionForms使用不便...
模块一基于Struts2框架,考核内容包括搭建和测试Struts2开发环境、配置框架、设计并实现Action类、输入验证、访问Web元素、OGNL表达式应用、标签库应用、拦截器应用和类型转换器应用等。考核标准具体细化为10个任务...
标题中的"loginServer CAS / josso / LDAP / RBAC / ACL"涉及到了多个IT领域的关键概念,这些都是构建安全、高效的企业级身份验证和授权系统的重要组成部分。以下是对这些概念的详细解释: 1. **CAS(Central ...
- **LoginAction类**:处理登录操作,通过AdminDAO查询数据库验证用户,成功则将用户信息存入Session,否则返回错误。 - **ProviderAction类**:实现了供应商信息的修改和删除操作,包括分页功能,提供对数据库...
思维模型关注身份验证和操作流程,而业务流程分析则根据停车场的管理模式,将用户分为三个角色,通过登录验证后,进入相应界面执行管理任务。 综上,停车场管理系统是一个集安全性、效率和智能化于一体的综合性解决...
1. **用户认证与权限管理**:系统需要有用户登录和权限验证机制,确保只有授权的人员可以访问和操作数据。 2. **学生信息管理**:包括添加、删除、修改和查询学生的基本信息,如姓名、学号、班级等。 3. **成绩录入*...
同时,Spring 的 AOP(面向切面编程)可以方便地实现日志记录、权限验证等横切关注点。 Hibernate 则用于与数据库进行交互。在本项目中,可能有一个 User 对象对应数据库中的用户表,通过 Hibernate 的注解或 XML ...
- **Struts2工作原理**:Struts2框架遵循MVC设计模式,将应用程序分为模型、视图和控制器三个部分,其中控制器负责接收请求并将请求分发到相应的处理程序。 - **Struts2的作用及优势**:Struts2提供了丰富的标签库...
项目流程管理系统接口协议文档2是关于构建一个用于管理IT项目流程的后台系统的详细技术文档。...通过细化的角色分配和权限控制,确保了不同角色在系统中的操作符合其职责,从而提高整个项目的管理效率。
- **部署上线**:将系统部署到生产环境,对外提供服务。 #### 六、结论 本项目的BBS论坛基于Java技术栈开发,采用了成熟的S.H.S架构,结合B/S模式实现了高效、安全、易用的在线交流平台。通过对上述关键技术点的...