spring boot 获取指定类中自定义注解的内容
一、获取自定义注解内容:
/**
* 自定义注解内容获取
* @date 2017年9月26日 上午10:53:39
*/
public class RequestLimitUtils {
/**
* 查询指定controller中的功能点信息
* @param clazz: controller类名
* @param enable_validate: 是否只查询@RequestLimit注解中is_validate为true的对象
* @param has_controller_annotation: 是否包含controller类名上的@RequestLimit注解内容
* @return
*/
public static List
List
boolean validate_success = true; //启用验证成功或者不启用验证
//HashMap中的key值
String function_file = “function_file”; //文件名
String fun_file_position = “fun_file_position”; //文件位置
String fun_assembly_url = “fun_assembly_url”; //controller对应的访问路径(功能集的路径)
String function_name = “function_name”; //功能点的路径
String name = “name”; //功能点名称
String is_validate = “is_validate”; //是否需要进行权限验证
String desc = “desc”; //功能点或者功能集描述
String total_fun_assembly_url = “”; //功能集对应的请求路径
String fun_file_position_name = clazz.getName();
String function_file_name = clazz.getSimpleName();
//controller类名上的注解
if(clazz.isAnnotationPresent(RequestLimit.class))\{//判断是否含有@RequestLimit注解
RequestLimit requestLimit = clazz.getAnnotation(RequestLimit.class);
if(enable\_validate && !requestLimit.is\_validate())\{//只查询注解中is\_validate为true的
validate\_success = false;
\}else\{
validate\_success = true;
\}
if(validate\_success && has\_controller\_annotation)\{
HashMap<String, String> map = new HashMap<String, String>();
total\_fun\_assembly\_url = requestLimit.fun\_assembly\_url();
map.put(fun\_assembly\_url, requestLimit.function\_name());
map.put(function\_name, requestLimit.function\_name());
map.put(name, requestLimit.name());
map.put(desc, requestLimit.desc());
map.put(is\_validate, requestLimit.is\_validate() + "");
map.put(function\_file, function\_file\_name);
map.put(fun\_file\_position, fun\_file\_position\_name);
list.add(map);
\}
\}
//获取controller各个method上的注解
//Annotation\[\] \_fields = clazz.getDeclaredAnnotationsByType(RequestLimit.class);
Method\[\] methods = clazz.getDeclaredMethods();
//for(Annotation field : \_fields)\{
for(Method method : methods)\{
//RequestLimit requestLimit = (RequestLimit.class)field;
RequestLimit requestLimit = method.getAnnotation(RequestLimit.class);
if(enable\_validate && !requestLimit.is\_validate())\{//只查询注解中is\_validate为true的
validate\_success = false;
\}else\{
validate\_success = true;
\}
if(validate\_success)\{
HashMap<String, String> map = new HashMap<String, String>();
String son\_fun\_assembly\_url = requestLimit.fun\_assembly\_url();
map.put(fun\_assembly\_url, son\_fun\_assembly\_url.length() > 0 ? son\_fun\_assembly\_url : total\_fun\_assembly\_url);
map.put(function\_name, requestLimit.function\_name());
map.put(name, requestLimit.name());
map.put(desc, requestLimit.desc());
map.put(is\_validate, requestLimit.is\_validate() + "");
map.put(function\_file, function\_file\_name);
map.put(fun\_file\_position, fun\_file\_position\_name);
list.add(map);
\}
\}
return list;
\}
public static void main(String[] args) {
List
if(null != list && list.size() > 0){
for(int i=0; i
System.out.println(map.toString());
}
}
}
}
二、自定义注解
/**
* 自定义注解
* 如果Controller 有该标记,那么这个Controller下面所有的方法都会被过滤器进行验证
* 如果Controller 没有有该标记,但Controller中的某个方法拥有该标记,那么这个方法将被过滤器验证(其他没有被标记的不会被验证)
* @date 2017年9月21日 下午311
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE}) //该注解修饰类中的方法,准许controller和子方法添加本注解
//@Target(ElementType.METHOD) //该注解修饰类中的方法,只准许子方法添加本注解
@Order(Ordered.HIGHEST_PRECEDENCE) //最高优先级
public @interface RequestLimit {
/**
* controller对应的访问路径
* 功能集的路径
*/
String fun_assembly_url();
/**
* 功能点的路径
*/
String function_name();
/\*\*
\* 功能点名称
\*/
String name();
/\*\*
\* 是否需要进行权限验证
\*/
boolean is\_validate();
/\*\*
\* 功能点或者功能集描述
\*/
String desc();
}
还没有评论,来说两句吧...