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>