Spring Boot 自动加载指定包下的拦截器
来源:互联网 发布:caffe ubuntu 编辑:程序博客网 时间:2024/06/07 00:09
Spring Boot 在我们需要对程序添加拦截器需要使用 WebMvcConfigurerAdapter 中的 addInterceptors方法去注册拦截器,这样我们如果在程序里面有多个拦截或者我们在项目结构为maven 关系存在父子级关系时候。WebMvcConfigurerAdapter 类我们写在父类 这样就无法获取到子类存在哪些拦截器了。这个我们就需要在父级和子级都写对应的 WebMvcConfigurerAdapter 方法。这里我根据前面我的一篇博客为 获取某个包下面的所有类来实现自动加载某个包下面的所有拦截器。
前一篇博客地址:http://blog.csdn.net/jiangzeyin_/article/details/74702463
第一个类注解(主要配置对应拦截器拦截的路径):
package com.yoke.common.interceptor;import java.lang.annotation.*;/** * Created by jiangzeyin on 2017/2/4. */@Documented@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface InterceptorPattens { String[] value() default {"/**"};}
然后拦截器加载控制类:
package com.yoke.common.interceptor;/** * Created by jiangzeyin on 2017/2/4. */import com.yoke.system.log.SystemLog;import com.yoke.util.PackageUtil;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import java.io.IOException;import java.lang.reflect.Modifier;import java.util.Arrays;import java.util.List;/** * 拦截器控制器 * * @author jiangzeyin * @create 2017 02 04 16:12 */@Configuration@EnableWebMvcpublic class InterceptorControl extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { init(registry); } /** * @param registry */ private void init(InterceptorRegistry registry) { List<String> list; try { list = PackageUtil.getClassName("com.yoke.common.interceptor"); } catch (IOException e) { SystemLog.ERROR().error("加载拦截器错误,初始化包错误", e); return; } if (list == null || list.size() <= 0) { SystemLog.LOG().info("加载拦截器错误,没有需要初始化的拦截器"); return; } for (String item : list) { Class<HandlerInterceptorAdapter> classItem = null; try { classItem = (Class<HandlerInterceptorAdapter>) Class.forName(item); } catch (ClassNotFoundException e) { SystemLog.ERROR().error("加载拦截器错误", e); } if (classItem == null) continue; boolean isAbstract = Modifier.isAbstract(classItem.getModifiers()); if (isAbstract) continue; if (!HandlerInterceptorAdapter.class.isAssignableFrom(classItem)) continue; InterceptorPattens interceptorPattens = classItem.getAnnotation(InterceptorPattens.class); if (interceptorPattens == null) continue; HandlerInterceptorAdapter handlerInterceptor = null; try { handlerInterceptor = classItem.newInstance(); } catch (InstantiationException | IllegalAccessException e) { SystemLog.ERROR().error("加载拦截器错误", e); continue; } if (handlerInterceptor == null) continue; registry.addInterceptor(handlerInterceptor).addPathPatterns(interceptorPattens.value()); SystemLog.LOG().info("加载拦截器:" + classItem + " " + Arrays.toString(interceptorPattens.value())); } }}
这就可以自动加载包下面属于对应拦截器的类了。
我就可以放心的写拦截器了,再也不用手动去注册了。
阅读全文
1 0
- Spring Boot 自动加载指定包下的拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring-Boot拦截器
- spring boot 拦截器
- Spring Boot拦截器
- spring boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- Spring Boot 拦截器
- spring boot的拦截器简单使用
- Spring boot之拦截器的实现
- spring boot 显示指定要扫描的包
- Ionic3隐藏tab的方法
- ionic开发项目创建
- JS数组的深浅拷贝
- 【小游戏】C++扫雷
- 2小时学会spring Root(慕课网)
- Spring Boot 自动加载指定包下的拦截器
- QLCDNumber学习整理
- [noip模拟2017.7.3]
- postgresql9.6 安装plpython3
- 笔记——变量多重定义的问题
- python删除不需要的python文件
- ExpandableListView(可展开的列表组件)的说明以及其用法
- SharedPreferences应用
- BZOJ 1823 [JSOI2010] 满汉全席