使用Annotation根据用户不同角色分配访问Java方法的权限

在 Web ">开发过程中,一个非常理想的开发过程是,开发人员在开发中并不需要关心权限问题,不需要在 Java 方法中写很多逻辑判断去判断用户是否具有合适的角色和权限,这样开发会花费非常多的人力成本,因为所有的开发人员都需要了解关于权限的详细内容,也非常不容易进行后期维护。我们希望有专门的很少数量的开发人员了解权限内容,并且可以随时方便的修改和配置。于是,我们使用 Annotation,在 Java 方法之前使用 Annotation 可以非常方便的添加,修改和删除对于权限的管理功能。

本文描述了在开发过程中经常遇到的关于权限验证问题的一个典型应用案例,这个案例描述如下:系统要求只有登录用户才可以下定单。通过这个简单的例子,我们将看到如何完成整个系统的权限控制。

本文的开发环境如下:

Struts2 Spring 3.0 JDK1.6 AspectJ 6.9

本文将分为以下几个章节,详细描述提出的权限验证方法:

AOP 的基本概念 权限验证系统架构详细讲解

AOP 的基本概念

AOP 是 Aspect Oriented Programming 的缩写,意思是面向方面的编程。我们在系统开发中可以提取出很多共性的东西作为一个 Aspect,可以理解为在系统中,我们需要很多次重复实现的功能。比如计算某个方法运行了多少毫秒,判断用户是不是具有访问权限,用户是否已登录,数据的事务处理,日志记录等等。

一般我们描述一个故事,都会说什么时间什么地点发生了什么事情,那 Join Point 的意思是,发生的地点,Advice 就是发生了什么事,Aspect 就是这个故事的整体,包含了 Join Point 和 Advice。PointCut 又把地点进行了规律性的总结,比如使用正则表达式 (com.example.service.*,即所有在 service 包下面的方法),把所有 Advice 发生的地点进行描述。

读者现在应该已经大概了解了 AOP 的基本概念,下面我们再来详细介绍一下:

Join Point:表示在程序中明确定义的执行点,典型的 Join Point 包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 Join Point。

PointCut:表示一组 Join Point,这些 Join Point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。

Advice:Advice 定义了在 PointCut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 Join Point 之前、之后还是代替执行的代码。

基于 Annotation 的 Spring AOP 权限验证方法的实现

Spring AOP 目前只支持基于 method 的 Join Points,而不支持基于 fileds 的 Join Points,也可以使用 AspectJ 去实现基于 fields 的 AOP,这并不会破坏 Spring 的核心 API。 Spring AOP 更倾向于配合 Spring IoC 去解决在企业级系统中更为普遍的问题。

在这个具体的例子中,我们实现了这样一个场景,在用户下订单的时候,先判断用户是否已经登录,如果用户没有登录,系统将转到登录页面,要求用户登录。

1. 配置 applicationContext

在 Spring 中支持 AOP 的配置非常的简单,只需要在 Spring 配置文件 applicationContext.xml 中添加:

<aop:aspectj-autoproxy/>

同时在 applicationContext.xml 的 schema 中配置:

清单 1

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">

在配置时,我们需要将引用的 jar 包放置在 WEB-INF/lib 目录下面:

需要的 jar 包有

配置这些之后 Spring AOP 就可以开始工作了。

时间: 2024-09-28 16:28:36

使用Annotation根据用户不同角色分配访问Java方法的权限的相关文章

php网站判断用户是否是手机访问的方法_php实例

随着移动设备的普及,网站也会迎来越来越多移动设备的访问.用适应PC的页面,很多时候对手机用户不友好,那么有些时候,我们需要判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面.这里就介绍一下,如何判断用户是否用手机访问. 自定义的函数如下: $agent = check_wap(); if( $agent ) { header('Location: http://www.jb51.net'); exit; } // check if wap function check_wap()

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操作码与js事件 @Html.ToolButton("btnAllot", "icon-share", "分配用户", perm, &quo

Win8系统如何启用分配访问限制?

  分配访问是一种设置,可以限制特定标准帐户仅使用一个 Windows 应用商店应用.当使用特定帐户登录时,仅能使用该应用,不能使用触摸手势.鼠标.键盘或硬件按钮切换应用或关闭应用,也同样看不到任何应用通知.本文介绍下Win8系统启用分配访问的方法: 1. 从屏幕右边缘向中间轻扫,点击"设置",然后点击"更改电脑设置".(如果使用的是鼠标,则指向屏幕右下角,然后将鼠标指针向上移动,单击"设置",然后单击"更改电脑设置".) 2

asp.net 中用户和角色的验证

asp.net 本文引用下面的 Microsoft .NET Framework 类库命名空间: • System.Web.Security • System.Web.Principal 请求的安全性事件流以下步骤简要介绍了在客户端发出请求时发生的事件序列: 1. 客户端请求 IIS 服务器上的一个 .aspx 页. 2. 将客户端凭据传递给 IIS. 3. IIS 对客户端进行身份验证,然后将经过身份验证的标记随客户端请求一起传送到 ASP.NET 工作进程. 4. 根据 IIS 传送的经过身

springBoot+springSecurity 数据库动态管理用户、角色、权限

  使用spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器, 并分别实现Acce

【SSH项目实战】国税协同平台-13.用户与角色关系

上一次写到角色权限管理,我们设定的角色是要使用的,我们接下来写用户与角色的关系. 角色与权限:多对多 一个角色可以有多个权限,一个权限可以被多个角色使用. 那我们下面就来使用我们完成的角色. 我们先来看一下需求,记不记得之前的用户编辑界面: 可以看到,我们注册用户的时候是要给用户安排一个角色的,而我们的角色在角色管理系统里面已经创建好了,可以从创建好的角色中挑选需要的角色(该角色拥有自己特有的权限). 所以,我们说一下用户与角色的关系设计: 用户:用户1,用户2 角色:管理员,一般用户 用户与角

Win8如何启用分配访问?

  分配访问是一种设置,它使你可以限制特定标准帐户仅使用一个 Windows 应用商店应用. 例如,你可以限制公司的客户仅使用一个应用,以便将你的电脑用作信息亭. 每当客户使用特定帐户登录时,他们仅能使用该应用. 他们不能使用触摸手势.鼠标.键盘或硬件按钮切换应用或关闭应用. 他们同样看不到任何应用通知. 若要启用分配访问,需要使用管理员帐户登录你的电脑,还需要电脑上的标准帐户,该电脑至少安装了一个 Windows 应用商店应用以供分配访问使用. 有关帐户的详细信息,请参阅 创建用户帐户.用户帐

Win8系统分配访问限制的设置技巧

  Win8系统已经体验过有一段时间了,用户对系统内的新创意操作可说是十分的感兴趣,下面就来带大家一起去体验下win8系统下分配访问的设置技巧,如何通过分配访问来限制用户的使用范围. Win8系统分配访问限制的设置技巧: 1. 从屏幕右边缘向中间轻扫,点击"设置",然后点击"更改电脑设置".(如果使用的是鼠标,则指向屏幕右下角,然后将鼠标指针向上移动,单击"设置",然后单击"更改电脑设置".) 2. 依次点击或单击"

服务器-做一款全国范围的App 可在APP内部切换城市 但所以城市的用户可以跨省 访问APP

问题描述 做一款全国范围的App 可在APP内部切换城市 但所以城市的用户可以跨省 访问APP 可在APP内部切换城市 但所以城市的用户可以跨省 访问APP的其他城市 如何做到各个服务器的用户数据共享 后台服务器该如何做架构 求思路! 解决方案 可以通过gps或者ip判断用户在哪个城市. 至于架构,不必要每个城市做一个数据库或者搞一个服务器.只要你的记录包含一个城市的字段,查询符合条件的数据就可以. 解决方案二: 统一架构按照需求部署服务器,而不是每个城市一台服务器的好处就是这样可以提高服务器效