spring boot 获取指定类中自定义注解的内容

一、获取自定义注解内容:

/**

 * 自定义注解内容获取
 * @author Chen,Shunhua
 * @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<HashMap<String, String>> geLimitInfo(Class<?> clazz, boolean enable_validate, boolean has_controller_annotation){
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
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<HashMap<String, String>> list = geLimitInfo(AccessModeController.class, true, false);

if(null != list && list.size() > 0){
for(int i=0; i<list.size(); i++){
HashMap<String, String> map = list.get(i);
System.out.println(map.toString());
}
}
}

}

二、自定义注解

/**
 * 自定义注解
 * 如果Controller 有该标记,那么这个Controller下面所有的方法都会被过滤器进行验证
 * 如果Controller 没有有该标记,但Controller中的某个方法拥有该标记,那么这个方法将被过滤器验证(其他没有被标记的不会被验证)
 * @author Chen,Shunhua
 * @date 2017年9月21日 下午3:09:11
 */
@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();
}  

猜你喜欢

转载自blog.csdn.net/shunhua19881987/article/details/78094870
今日推荐