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

福利一:

百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的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. [Java]LeetCode138. 复制带随机指针的链表 | Copy List with Random Pointer

    A linked list is given such that each node contains an additional random pointer which could point t ...

  2. [Swift]LeetCode678. 有效的括号字符串 | Valid Parenthesis String

    Given a string containing only three types of characters: '(', ')' and '*', write a function to chec ...

  3. Markdown语法简介

    1.标题 在想要设置为标题的文字前面加#来表示一个#代表一级标题,总共六级 2.字体 加粗要加粗的文字左右分别用两个*号包起来 斜体要倾斜的文字左右分别用一个*号包起来 斜体加粗要倾斜和加粗的文字左右 ...

  4. Mysql的两种偏移量分页写法

    当一个查询语句偏移量offset很大的时候,如select * from table limit 10000,10 , 先获取到offset的id后,再直接使用limit size来获取数据,效率会有 ...

  5. 虎牙数万主播同时在线直播的秘密,CDN推流日志上行实时监控

    6 月 10 日,又拍云 Open Talk | 2018 音视频技术沙龙·深圳站 顺利落幕,来自虎牙的直播运维研发架构师张波在沙龙上做了<基于CDN推流日志的主播上行实时监控及其自动化解密&g ...

  6. 【转】getopt模块,实现获取命令行参数

    python中 getopt 模块,该模块是专门用来处理命令行参数的 函数getopt(args, shortopts, longopts = []) 参数args一般是sys.argv[1:],sh ...

  7. Lottie 动画里有图片怎么办?设计师小姐姐也能帮你减少开发量!

    一.序 Hi,大家好,我是承香墨影! Lottie 是 Airbnb 开源的一套跨平台的完整解决方案,设计师只需要使用 After Effectes (之后简称 AE)设计出动画之后,使用 Lotti ...

  8. Java基础1:深入理解Java面向对象三大特性

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  9. Spring Boot分布式系统实践【扩展1】shiro+redis实现session共享、simplesession反序列化失败的问题定位及反思改进

    前言 调试之前请先关闭Favicon配置 spring:     favicon:       enabled: false 不然会发现有2个请求(如果用nginx+ 浏览器调试的话) 序列化工具类[ ...

  10. C语言数组操作和指针操作谁更高效

    在上一篇博文  代码优化小技巧(持续更新......) 第三条关于数组和指针谁更高效, 意犹未尽, 决定单独拉出一篇来讲 1. 数组和指针操作对比 #include <stdio.h> i ...