正文前先来一波福利推荐:

福利一:

百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。

福利二:

毕业答辩以及工作上各种答辩,平时积累了不少精品PPT,现在共享给大家,大大小小加起来有几千套,总有适合你的一款,很多是网上是下载不到。

获取方式:

微信关注 精品3分钟 ,id为 jingpin3mins,关注后回复   百万年薪架构师 ,精品收藏PPT  获取云盘链接,谢谢大家支持!

-----------------------正文开始---------------------------

切面编程的应用案例比较多,在统一的日志处理,鉴权过程中都会用的AOP原理,本文主要针对对进口的访问权限进行控制为例,说明

切面编程的使用;

1、使用Aspectj的方式进行切面编程;

2、编码环境,spring框架;

3、延伸的 spring中自定义注解的实现;

一、自定义注解:注解用来加在权限控制接口上进行注解处理

//在运行时执行
@Retention(RetentionPolicy.RUNTIME)
//注解适用于方法
@Target({ElementType.METHOD})
@Documented
@Inherited
public @interface Function {
//注解的name属性
String value() default "";
}

二、对注解进行切面处理

@Aspect
@Component
public class RoleAccessConfig
{
protected boolean isAccessOK(String functionName)
{
//权限查阅
return false;
} protected boolean canAccess(String functionName)
{
if(functionName != null)
{
//总是允许访问
//针对名称进行权限查阅判断是否有权限
//
if( isAccessOK(functionName) )
{
System.out.println(" 具备删除权限 ");
return true;
}else
{
System.out.println(" 不具备删除权限 ");
return false;
}
}else{
System.out.println(" 违法访问 ");
return false ;
} } /**对Controller进行安全和身份校验 */
@Around("within(@org.springframework.stereotype.Controller *) && @annotation (function)")
public Object functionAccessCheck(final ProceedingJoinPoint pjp , Function function ) throws Throwable
{
if (function != null )
{
//自动以注解获得注解信息
String functionName = function.value();
if( ! canAccess(functionName ))
{
//获得数字签名
Signature ms= pjp.getSignature();
//判断是否数据方法签名
if (!(ms instanceof MethodSignature))
{
throw new IllegalArgumentException("该注解只能用于方法");
}
//转化为方法签名
MethodSignature msig = (MethodSignature) ms; throw new RuntimeException ("Can not Access !" + msig.getMethod() );
} //继续在切入点处进行操作,也就是有访问权限进入接口处理
Object o = pjp.proceed() ;
return o ;
}else
{
Object o = null;
return o;
}
}

三、在spring配置文件中,开启AOP使用配置

<aop:aspectj-autoproxy proxy-target-class="true"/>

只配置这段会报:The prefix "aop" for element "aop:aspectj-autoproxy" is not bound.

需要添加xsd约束:

添加这些有关AOP的配置:
 xmlns:aop="http://www.springframework.org/schema/aop"

 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd" 

四、在Controller中进行添加注解测试;

@RequestMapping(value = "/deleteDayCI.do")
@ResponseBody
@Function("user")
public ReturnResult deleteInfo( @RequestParam(value = "id", required = true) String id )
{
    ....
}

五、Aspectj用到的jar包:

aspectjrt-1.8.4.jar

aspectjweaver-1.8.3.jar

AOP中使用Aspectj对接口访问权限进行访问控制的更多相关文章

  1. Android中的安全与访问权限控制

    Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行.系统和应用之间的安全性是通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给 ...

  2. Swift 中 Selector 方法的访问权限控制问题

    今天用Swift写了个视图,在视图上加个手势,如下所示: panGestureRecognizer = UIPanGestureRecognizer(target: self, action: &qu ...

  3. 关于如何在你的Web项目中实现对空间数据访问权限的控制(一)

    Wednesday, 23 JUNE 近来一直在研究关于如何在我的WebGIS项目中实现对空间数据(已发布在GeoServer上)进行权限管理的问题.虽然到目前为止没能找到一个完美的解决方案,但通过这 ...

  4. C++ 类中的3种访问权限和继承方式

    访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问.三种继承方式分别是 public 继承,p ...

  5. C#中当程序的访问权限不足时,Directory.Exists和File.Exists方法不会抛出异常报错

    有些时候,我们开发的C#应用程序的执行账号,可能没有对一些文件夹和文件的访问权限,当我们使用Directory.Exists和File.Exists方法去判断这些文件夹和文件是否存在的时候,Direc ...

  6. Spring AOP中使用args表达式访问目标方法的参数

    Spring AOP 的使用过程理解 首先,aop的使用场景介绍: 1.处理一些通用的非功能性的需求,不影响业务流程,比如说打印日志.性能统计.推送消息等: 2.aop无法拦截static.final ...

  7. 在linux中限制用户ftp访问权限

    1.环境:redhat linux企业版4.ftp为vsftp.被限制用户名为aaa.被限制路径为/bbb.2.建用户:在root用户下,相继进行如下操作       adduser aaa      ...

  8. Oracle中注意用户的访问权限

    新增表.序列.存储过程等,要注意用户(例如System)的权限.如果在增删改查过程中出现数据库读写权限的报错,则在建表(或者序列.存储过程等)时,在脚本前面加 GRANT CREATE TABLE T ...

  9. AOP中的ASPECTJ

    一.准备 1.架包 2.配置文件 二.注解的形式 UserDao.java package cn.itcast.spring.aspectj.annocation; public class User ...

随机推荐

  1. 【二代示波器教程】第14章 uCOS-III操作系统版本二代示波器实现

    第14章      uCOS-III操作系统版本二代示波器实现 本章教程为大家讲解uCOS-III操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任 ...

  2. 深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码

    之前在介绍Spring Redis进行存储的时候,都是通过RedisTemplate中的defaultSerializer,即JdkSerializationRedisSerializer.通过Jdk ...

  3. 判断二叉树是否BST

    一.问题: 请实现一个函数,检查一棵二叉树是否为二叉查找树.给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树. 二.思路: 解法一:从根节点开始遍历二叉树, ...

  4. [Swift]LeetCode74. 搜索二维矩阵 | Search a 2D Matrix

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  5. [Swift]LeetCode477. 汉明距离总和 | Total Hamming Distance

    The Hamming distance between two integers is the number of positions at which the corresponding bits ...

  6. Java第三次上机随笔

    就记录一下新的收获吧~ 1.定点数(BigDecimal) 先区分一下浮点数和定点数: 浮点数(float/double):小数点可以任意浮动,称为浮点表示法 定点数(BigDecimal):一种数约 ...

  7. mysql主从集群配置

    1.二进制日志 主: #master vim /etc/mysql/my.cnf #server-id server-id=2 #二进制日志 log-bin=musql-bin#statement r ...

  8. IIS与ASP.NET对请求的处理

    IIS接收请求到进入CLR 当用户向服务器发送的请求时,以驱动形式运行的HTTP.SYS接收到该请求,将其分发给W3SVC:IIS6中,W3SVC会去解析出UR,并根据从Metabase获取的URL与 ...

  9. Android应用系列:仿MIUI的Toast动画效果实现(有图有源码)

    前言 相信有些人用过MIUI,会发现小米的Toast跟Android传统的Toast特么是不一样的,他会从底部向上飞入,然后渐变消失.看起来效果是挺不错的,但是对于Android原生Toast是不支持 ...

  10. UPC:ABS

    问题 G: ABS 时间限制: 1 Sec  内存限制: 128 MB提交: 537  解决: 186[提交] [状态] [讨论版] [命题人:admin] 题目描述 We have a deck c ...