spring方法拦截器 MethodInterceptor

HappyHeng 2017-01-03

使用到spring方法拦截器MethodInterceptor实现权限控制,MethodInterceptor可以使用通配符,并且是基于注解的。

简单例子代码如下:

1、定义需要拦截的类

Java代码收藏代码

publicclassLoginAction{

//没有权限限制

@RequestMapping(value="/login")

publicvoidlogin(HttpServletRequestreq,HttpServletResponseres){

//登录功能.

}

//需要登录完成后才可访问

@LoginMethod

@RequestMapping(value="/userList")

publicvoiduserList(HttpServletRequestreq,HttpServletResponseres){

//获取用户列表

}

}

注意上面的@LoginMethod是我自定义的注解

2、定义LoginMethod注解

Java代码收藏代码

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public@interfaceLoginMethod{

}

3、定义MethodInterceptor拦截器

Java代码收藏代码

publicclassSystemMethodInterceptorimplementsMethodInterceptor{

@Override

publicObjectinvoke(MethodInvocationmethodInvocation)throwsThrowable{

Methodmethod=methodInvocation.getMethod();

if(method.isAnnotationPresent(LoginMethod.class)){//加了@LoginMethod注解,被拦截

Useruser=sessionUtil.getCurrUser();

if(user==null){//未登录

//proceed方法不调用,方法被拦截

returnnull;

}else{

returnmethodInvocation.proceed();//该方法不调用,则被拦截的方法不会被执行

}

}else{

returnmethodInvocation.proceed();

}

}

}

4、配置文

Xml代码收藏代码

<beanid="systemMethodInterceptor"class="com.tzz.interceptor.SystemMethodInterceptor">

</bean>

<aop:config>

<!--切入点-->

<aop:pointcutid="methodPoint"expression="execution(*com.tzz.controllor.web.*.*(..))"/><!--在该切入点使用自定义拦截器-->

<aop:advisorpointcut-ref="methodPoint"advice-ref="systemMethodInterceptor"/>

</aop:config>

相关推荐