`
highriver
  • 浏览: 71730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于权限的思路

    博客分类:
  • java
阅读更多
现在要设计一个很简单的权限模块。使用的环境是struts2+spring。
需求是在调用每一个业务方法之前,都做一个权限的检查。因为涉及到不是若干方法,是所有方法,而且每个方法的检查基本上是根据用户的权限判断是否有权调用这个方法,所以,打算使用AOP,而不使用油漆工模式对方法包装。
具体的思路是这样:
1.每个方法其实就对应一个权限。所以打算定义一个Annocation类型,里面只有一个属性opid,值为对应权限表中的operationId.
2.对所有方法进行拦截。但是希望在拦截器中知道当前拦截的是哪个方法。并且能访问到这个方法注解中的opid
然后在拦截器中判断用户的权限集合(用户登陆的时候,可以查表放到session里)是否包含opid.如果包含,那么接着执行方法,如果不包含,那么返回
现在的问题是不知道拦截器是用struts2中的呢,还是spring的aop,对于这一块很陌生,希望帮我看一下,最好举个例子。谢谢:)
分享到:
评论
13 楼 highriver 2007-04-21  
迟了一步,谢谢,终于明白怎么做了。十分感谢你,我加你为好友了。希望不要嫌弃,一起进步吧。
12 楼 highriver 2007-04-21  
晕,filter好象只能正则匹配url地址。使用filter有难度呀。
11 楼 lee5593 2007-04-21  
不用那么麻烦,一般的做法是直接在资源表中添加你需要进行权限控制的URL,然后将这个资源赋给系统的一个角色,所有属于这个角色的用户在Filter中取到这个角色所有的资源列表,然后将当前请求的URL与取到的资源列表进行比较,如果存在则可以访问,不存在就重定向到无权限的提示页面。这样Action中的方法不需要进行命名约束
10 楼 highriver 2007-04-21  
lee5593 写道
对于方法的权限控制一般采用AOP中的around advice来实现。

终于明白你刚才说的这句话,如果action方法中调用了多个业务层的方法。使用around advice就比较恰当了。呵呵。也搞明白了url拦截与业务方法拦截。
我的情况其实就是url拦截。因为我的业务方法都是来自远程的方法调用。远程方法调用相当于一个门面。所以action中方法里所调用的“业务方法”一般情况只有一个。这样就和action中的方法对应起来。所以,只需要拦截action中方法对应的url。那么看来,struts2的拦截器可暂不考虑,而使用filter。现在想确认一下,如果我对actoin中的方法都规律命令,比如都加一个*_check(),filter中能不能匹配到。匹配到之后,怎么得到当前拦截的方法。因为我要通过方法名做权限判断。再次感谢lee5593给我澄清了这些模糊的认识。
9 楼 lee5593 2007-04-21  
struts2的拦截器我没有了解过,不过原理都一样,只是我不太明白你一直是强调基于Action层的方法拦截,其实一个URL请求对应的就是特定Action的一个方法,这时没有必要用方法拦截的手段来实现,直接用Servlet的标准Filter拦截URL就可以了,只有当你要用到基于业务层的方法调用权限控制时,也就是说一个Action方法中会调用多个业务层方法,这样就无法简单地通过URL的拦截来达到这个目的,这时候你才需要考虑用AOP来拦截业务层的方法。这应该是struts2拦截器无法办到的,因为这超出了它关注的范围(只是初步猜想,这需要你自己去证实 )
8 楼 highriver 2007-04-21  
谢谢,lee5593的指教。是呀,资源表中只要有一个字段用来保存方法名称不就可以了吗?呵呵。我早上也是这么想来着。只是这是咱天的贴子。那么下面的问题是我在action中对于每个请求方法做权限控制。其实每个请求方法对应的一个URL,这种情况下,刚才你说对于URL的请求使用FILTER,那么它与struts2的拦截器的主要区别是什么。感觉都是增强。我现在不清楚用哪个好。如何用?再次感谢。
7 楼 lee5593 2007-04-21  
highriver 写道
其实我是想用ACEGI,但是被我们老大给否了。认为简单问题复杂化(他们认为ACEGI比较复杂。)。最后谢谢二位。我现在也很为难,只能硬着头皮自己试试。如果annocation实在不成的话,就在每个URL请求后面跟一个对应方法的opid参数吧在struts2中的拦截器中判断一下试试。

你们老大认为的简单问题复杂化应该指的是Acegi学习曲线比较复杂吧,不过自己实现方法拦截的功能会带来更大的复杂度,而且不成熟的代码给后续的代码维护带来极大的工作量。退一步说如果要自己实现的话,你采用annotation或是URL请求带OPID参数也是非常ugly的做法,其实不用那么复杂,java的反射机制其实可以通过Method的getDeclaringClass和getName分别取到该方法的类或接口的Class对象和方法名称,再结合你的权限资源表配置同样可以做到对方法级权限的判断。
6 楼 highriver 2007-04-21  
其实我是想用ACEGI,但是被我们老大给否了。认为简单问题复杂化(他们认为ACEGI比较复杂。)。最后谢谢二位。我现在也很为难,只能硬着头皮自己试试。如果annocation实在不成的话,就在每个URL请求后面跟一个对应方法的opid参数吧在struts2中的拦截器中判断一下试试。
5 楼 dlee 2007-04-21  
对,这些事情Acegi都能做,而且完全采用AOP方式,不会对业务代码造成侵入。你们既然已经用了Spring,把Acegi用起来就不会很困难了。

详情见《Spring框架高级编程》,不过这本书翻译的太烂,估计你看起来会很痛苦。
罗时飞专门写了一本《敏捷Acegi、CAS--构建安全的Java系统》,也可以找来看看。
http://www.china-pub.com/computers/common/info.asp?id=34401
4 楼 lee5593 2007-04-21  
引用
现在的问题是不知道拦截器是用struts2中的呢,还是spring的aop,对于这一块很陌生,希望帮我看一下,最好举个例子。谢谢:)

对于URL请求的权限控制一般采用Filter来实现,对于方法的权限控制一般采用AOP中的around advice来实现。
3 楼 lee5593 2007-04-21  
Rod教导我们不要重复发明轮子,你的需求已经有非常成熟的开源解决方案。推荐你去了解一下Acegi。

附Springside WIKI上对Acegi的简介:
引用
    Acegi 是Spring Framework 下最成熟的安全系统,它提供了强大灵活的企业级安全服务,如完善的认证和授权机制,Http资源访问控制,Method 调用访问控制,Access Control List (ACL) 基于对象实例的访问控制,Yale Central Authentication Service (CAS) 耶鲁单点登陆,X509 认证,当前所有流行容器的认证适配器,Channel Security频道安全管理等功能。

它提供了多方面的安全控制粒度:

URL 资源访问控制
http://apps:8080/index.htm -> 所有用户可以访问
http://apps:8080/user.htm -> 只给授权用户访问
方法调用访问控制
public void getData() -> 所有用户可以访问
public void modifyData() -> 只有管理员有权限访问
对象实例保护
order.getValue() < $100 -> 所有用户可以访问
order.getValue() > $100 -> 合法的用户可以访问
2 楼 highriver 2007-04-21  
顶一下。谢谢
1 楼 highriver 2007-04-20  
自己顶一下,正在研究struts2中的拦截器,现在还有一个问题就是要确认这种思路对不对。难点是拦截器中能否智能的知道当前被拦截的方法,以及得到这个方法注解中的ogid.

相关推荐

    办公管理系统权限的思路

    ### 办公管理系统权限管理思路详解 #### 一、引言 在当今信息化时代,办公管理系统作为企业内部管理和协作的重要工具,其权限管理模块的设计至关重要。合理的权限管理体系不仅能够提高系统的安全性,还能确保数据的...

    权限组件设计思路(推荐)

    本篇文章将深入探讨权限组件的设计思路,帮助开发者理解如何有效地实现这一重要功能。 首先,权限组件的核心目标是实现对用户操作的精细化控制。这包括对资源(如数据、功能模块)的访问权限进行定义、分配、检查...

    权限系统设计思路与设计方案

    本文主要探讨基于用户、角色、权限的设计思路,并提供一种实现方案。 首先,理解基本概念: 1. **权限**:权限定义了用户对特定功能或资源的操作能力,如查看页面、调用业务逻辑、增删改查等。权限可以进一步细分...

    通用权限管理系统java权限处理及其实现思路

    "通用权限管理系统Java权限处理及其实现思路" 在B/S系统中,权限管理是一个非常重要的方面,因为浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易...

    一个用户权限管理模块的设计思路

    下面将详细阐述一个用户权限管理模块的设计思路。 首先,我们要明确权限资源,即功能资源。这些资源是系统内所有可以被赋予权限的操作或功能,它们通常构成一个层次结构,如系统管理、单位管理、查看和修改单位等。...

    OA系统数据库权限设计思路及数据库

    花了一天时间研究一篇网上关于OA系统权限设计的文档,按照文档自己手动创建了数据库,附件包括文档跟数据库,有想要了解的同学可以下载!tb_User:用户信息基本表; tb_Department:部门表; tb_Company:公司表; ...

    管理系统权限处理思路文档

    ### 管理系统权限处理思路详解 #### 一、前言 在现代软件系统特别是Web应用中,权限管理是一项非常重要的功能。合理的权限管理不仅可以提高系统的安全性,还能提升用户体验,确保不同角色的用户只能访问他们被授权...

    BW报表权限设计思路和步骤

    详细介绍了SAP BW报表权限设计的思路和技巧,对 初学者很有帮助!

    一文读懂权限系统设计思路.docx

    权限系统设计思路 权限系统是一个非常重要的安全机制,在现代企业中扮演着至关重要的角色。权限系统的设计主要是为了限制用户的访问范围,防止未经授权的访问和操作。下面是权限系统设计思路的详细介绍: 一、权限...

    Forums项目的权限设计思路分析

    在Forums项目的权限设计中,主要考虑了几个关键要素,以确保系统安全和管理效率。首先,权限管理涉及以下几个核心元素: 1. **信息对象**:这是权限管理的基础,可以是一个论坛板块、帖子或者文档等。 2. **对象...

    权限管理系统设计方案

    【权限管理系统设计方案】是关于如何构建一个有效管理用户权限的系统的详细文档。权限设计的核心在于理解用户、组、角色和权限这四个基本概念及其相互关系。 1. **权限设计概念** - **权限资源**:权限资源是系统...

    关于权限设计的探讨.pdf

    关于权限设计的探讨 权限设计是多用户系统和网络应用程序中不可或缺的一部分,特别是在MIS系统中。权限设计通常包括数据库设计、应用程序接口(API)设计、程序实现三个部分,这三个部分相互依存,密不可分。 在权限...

    后台管理系统的权限以及vue处理权限的思路.docx

    后台管理系统的权限以及vue处理权限的思路.docx

    用Linux思路设置IIS权限.pdf

    本文主要讨论了如何运用Linux的权限管理思路来解决Windows上的IIS(Internet Information Services)服务器的权限问题。这个问题涉及到文件上传功能的实现,以及不同服务器之间的文件共享。 在Windows环境中,IIS是...

    Spring Boot-Shiro-Vue的权限管理思路.前后端都加以控制

    本项目以"Spring Boot-Shiro-Vue"为技术栈,构建了一套完整的权限管理系统,虽然最新版本已移除Shiro,但我们可以探讨基于Shiro的权限管理思路,以及Spring Boot和Vue.js如何协同实现这一目标。 **Spring Boot** 是...

    【ASP.NET编程知识】ASP.NET通用权限验证的实现代码思路.docx

    ASP.NET 通用权限验证的实现代码思路 本文旨在介绍 ASP.NET 通用权限验证的实现代码思路,涵盖了权限验证的整个过程,从导入参数到返回结果。该实现代码思路由九个类组成,分别是 SFWebPermission、SFConfig、...

    权限设计sql

    在IT行业中,权限设计是构建安全、可控的系统的关键部分,尤其是在数据库管理和Web应用程序开发中。SQL(结构化查询语言)是管理关系型数据库的主要工具,对于实现权限控制至关重要。在"权限设计sql"这个主题中,...

    原创layui与thinkphp最细级别权限控制后台,通过读取代码注释来实现权限控制

    这种思路的应用可以极大地简化权限管理的实现。传统的权限控制通常需要在数据库中维护角色和权限的关系,然后将角色分配给用户。但这种方式可能随着功能的增多变得复杂,难以维护。通过读取代码注释,可以将权限逻辑...

Global site tag (gtag.js) - Google Analytics