自定义访问权限控制

本文介绍了一种使用AOP+annotation进行权限访问控制的方法,通过定义@AccessRight注解,实现细粒度的权限管理。具体包括如何在JavaEE中应用此方案,涉及注解的定义、切面的实现以及与Spring框架的整合,以及在Controller中的应用示例。

项目需要做一些权限访问控制,觉得比较好的方案是AOP+annotation,因为在Java EE的权限控制也是使用类似方式实现。

1. AccessRight的注解

@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessRight {
	String code();

	boolean access() default false;

	boolean create() default false;

	boolean update() default false;

	boolean delete() default false;
} 
2. AccessControlAspect切面
@Component //如果不加,spring似乎不会识别这是一个切面
@Aspect
public class AccessControlAspect {
	private static final Logger log = Logger
			.getLogger(AccessControlAspect.class);

	@Pointcut("execution(* xx.*Bean.*()) ")
	public void accessControl() {
	}

	@Around("accessControl()")
	public Object checkRight(ProceedingJoinPoint jp) throws Throwable {
		String methodName = jp.getSignature().getName();
		log.info("check right: " + methodName);
		Method method = jp.getTarget().getClass().getDeclaredMethod(methodName);
		if (method.isAnnotationPresent(AccessRight.class)) {
			AccessRight right = method.getAnnotation(AccessRight.class);
			FunctionPermission permission = getRight(right.code());
			if (right.access() && permission.hasAccessPermission()) {
				log.info("has right to do");
				return jp.proceed();
			} else {
				log.error("no right to do");
			}

		}
		return jp.proceed();
	}

	private FunctionPermission getRight(String code) {
	}
} 
3. applicationContext.xml加如下内容:
<context:component-scan base-package="xx" />
<aop:aspectj-autoproxy proxy-target-class="false"/> true表示使用cglib代理,否则使用java反射代理 


4. 应用在controller中

@Controller
@Scope("request")
public class xxBean {
	@AccessRight(code = "something", access = true)
	public String foobar() {
		log.info("test...");
		return "test";
	}
}

转载于:https://my.oschina.net/l1z2g9/blog/27930

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值