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

福利一:

百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的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. 详解AMD规范及具体实现requireJS在工程中的使用

    前面的话 由CommonJS组织提出了许多新的JavaScript架构方案和标准,希望能为前端开发提供统一的指引.AMD规范就是其中比较著名一个,全称是Asynchronous Module Defi ...

  2. 【RL-TCPnet网络教程】第28章 RL-TCPnet之DNS应用

    第28章      RL-TCPnet之DNS应用 本章节为大家讲解RL-TCPnet的DNS应用,学习本章节前,务必要优先学习第27章的DNS基础知识.有了这些基础知识之后,再搞本章节会有事半功倍的 ...

  3. [Swift]LeetCode41. 缺失的第一个正数 | First Missing Positive

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  4. RxJS简介

    函数式编程 1.声明式(Declarativ) 和声明式相对应的编程⽅式叫做命令式编程(ImperativeProgramming),命令式编程也是最常见的⼀种编程⽅式. //命令式编程: funct ...

  5. vue实例属性的方法

    1.$mount()   手动设置挂载点  eg:vm.$mount("#app") 2.$destroy()  销毁   eg:vm.$destroy(); 3.$forceUp ...

  6. Spring Boot druid监控页添加登录访问权限(用户名+密码)

    需求 druid作为数据源的一名后起之秀,凭借其出色的性能,渐渐被大家使用.当然还有他的监控页面也有这非常大的作用.但是监控页面往往包含了很多隐私的数据信息,所以需要将其保密,所以可以为监控页面添加一 ...

  7. Python内置函数(28)——hash

    英文文档: hash(object)Return the hash value of the object (if it has one). Hash values are integers. The ...

  8. npm私有仓库 配置verdaccio在docker环境

    前端开发过程中,少不了自己封装一些通用的包,但又不想放在公共的平台,所以搭建一个npm私有的仓库是很有必要的. 在这里简单介绍如何使用 verdoccio 在docker环境下的配置.verdocci ...

  9. 【java设计模式】(5)---装饰者模式(案例解析)

    设计模式之装饰者模式 一.概念 1.什么是装饰者模式 装饰模式是在不使用继承和不改变原类文件的情况下,动态的扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.    这一个解释 ...

  10. Lucene 07 - 对Lucene的索引库进行增删改查

    目录 1 添加索引 2 删除索引 2.1 根据Term删除索引 2.2 删除全部索引(慎用) 3 更新索引 数据保存在关系型数据库中, 需要实现增.删.改.查操作; 索引保存在索引库中, 也需要实现增 ...