在网上找了很多资料也有写的比较好的,但是总有有一点半点的细节没有写出来,在这里自己总结下使用。

使用Java的自定义注解,首先个人需要了解下Java为我们提供的元注解和相关定义注解的语法。(这个我在网上选择了一篇详细的介绍链接在文章最底层)


1、首先自定义我们需要的注解

package com.plat;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /*
* @Retention(RetentionPolicy.SOURCE)
* 这个注解的意思是让MyAnnotation注解只在java源文件中存在,编译成.class文件后注解就不存在了
* @Retention(RetentionPolicy.CLASS)
* 这个注解的意思是让MyAnnotation注解在java源文件(.java文件)中存在,编译成.class文件后注解也还存在,
* 被MyAnnotation注解类标识的类被类加载器加载到内存中后MyAnnotation注解就不存在了
*/
/*
* 这里是在注解类MyAnnotation上使用另一个注解类,这里的Retention称为元注解。
* Retention注解括号中的"RetentionPolicy.RUNTIME"意思是让MyAnnotation这个注解的生命周期一直程序运行时都存在
*/
//Target注解决定MyAnnotation注解可以加在哪些成分上,如加在类身上,或者属性身上,或者方法身上等成分
/**
* @author jwkang
*是否需要判断权限,默认为true需要判断权限,设定为false的情况下不判断权限
*/
@Documented
@Inherited
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PlatPermission { boolean validate() default true;
}

2、将自定义注解标识在不需要判断权限的方法上

    @PlatPermission(validate=false)
@RequestMapping(value = "/getSelect", method = {RequestMethod.POST})
@ResponseBody
public BaseOutModel GetSelect(String selectType) {
BaseOutModel result = new BaseOutModel();
LinkedHashMap<String, String> data = new LinkedHashMap<String, String>();
try { if(!TypeOfEnum.contains(selectType))
{
result.setResult(false);
result.setErrorMessage("未找到对应信息");
return result;
}
TypeOfEnum typeOfEnum = TypeOfEnum.get(selectType);
data = EnumHelp.getZEnumDesList(typeOfEnum.getType());
result.setResult(true);
result.setResponse(data);
} catch (Exception e) {
e.printStackTrace();
logger.error("operateEmail err", e.toString());
result.setResult(false);
result.setErrorMessage("系统异常!请重试...");
return result;
}
return result;
}

3、进行权限的管控

jar包的引用:

import org.springframework.web.method.HandlerMethod;

权限的控制,注解读取

public class PlatHandlerInterceptorAdapter extends HandlerInterceptorAdapter {
private static final ILog logger = LogManager.getLogger(PlatHandlerInterceptorAdapter.class); @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception { //处理Permission Annotation,实现方法级权限控制
//HandlerMethod 需要对应Jar包的位置,否则会一直为false
if (handler.getClass().isAssignableFrom(HandlerMethod.class)) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
/*
* 1、确认当前的controller是否需要进行权限判定,如果需要则进行验证。
* 2、当controller不需要验证,则验证当前的方法是否需要权限验证,需要则进行验证,不需要则跳出
* */
//获取controller注解, controller检查是否需要验证权限控制
PlatPermission permission = handlerMethod.getMethod().getDeclaringClass().getAnnotation(PlatPermission.class);
if (permission != null && !permission.validate()) //不需要验证权限
{
return super.preHandle(request, response, handler);
}
//获取方法注解,方法检查是否需要验证权限控制
permission = handlerMethod.getMethod().getAnnotation(PlatPermission.class);
if (permission != null && !permission.validate()) //不需要验证权限
{
return super.preHandle(request, response, handler);
}
// 权限判断,没有权限则跳转至无权限页面,有权限则走正常流程
xxxx
} return super.preHandle(request, response, handler);
}
}

4、完成,整个一套的注解使用


深入Java注解(非常推荐):http://www.cnblogs.com/digdeep/p/4525567.html

最新文章

  1. 考勤系统——代码分析datagrid
  2. C++中string查找和取子串和整形转化
  3. NOIP2011提高组 聪明的质监员 -SilverN
  4. IOS之Core Foundation框架和Cocoa Foundation框架的区别
  5. Spring 常用工具类
  6. hdu 3718
  7. 转载--SQL Server 2005的XQuery介绍
  8. ceph入门学习链接
  9. 【HDU 2853】Assignment (KM)
  10. ultraedit替换所有空白行 --正则表达式使用
  11. hdu 1142 A Walk Through the Forest
  12. 促销R语言应用性能
  13. jQuery 1.10.2 and 2.0.3 Released
  14. json的遍历
  15. JSP 页面传值方法总结(转)
  16. odoo开发笔记 -- 字段增加唯一约束
  17. 图像处理之Retinex增强算法(SSR、MSR、MSRCR)
  18. linux及安全第六周总结
  19. wx 设置监测并自动更新
  20. shell学习(一)

热门文章

  1. android ListView,GridView 设置某一项显示位置
  2. [转]Android自定义Adapter的ListView的思路及代码
  3. RecyclerView中item无法充满的问题
  4. Centos7搭建lamp环境
  5. VS2013支持多字节
  6. Go 时间相关
  7. windows环境安装python虚拟环境
  8. 【python】详解numpy库与pandas库axis=0,axis= 1轴的用法
  9. C++ Primer(第4版)-学习笔记-第1部分:基本语言
  10. 洛谷——P1966 火柴排队&amp;&amp;P1774 最接近神的人_NOI导刊2010提高(02)