概述
拦截器是SpringMVC中的一种对象,能拦截器对Controller的请求。
拦截器框架中有系统的拦截器,还可以自定义拦截器,实现对请求预先处理。
实现自定义拦截器
1.SpringMVC中拦截器
1. 创建类实现SpringMVC框架的HandlerInterceptor接口
```java
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
```
2.需在SpringMVC的配置文件中,声明拦截器
```xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:path="url" />
<bean class="拦截器类全限定名称"/>
</mvc:interceptor>
</mvc:interceptors>
```
2.SpringBoot自定义拦截器
首先创建Interceptor类实现HandlerIntercetor接口
HandlerInterceptor接口
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
我们实现的是preHandle。
/**
* @param request
* @param response
* @param handler 被拦截器控制的对象
* @return boolean
* true :请求可以被Controller处理
* false:请求被截断
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("lanjieqi");
return true;
}
到这里自定义拦截器写好,我们要将自定义拦截器放入容器中
创建config继承WebMvcConfigurer接口
注意:需要再类的上面加入注解@Configuration如果不加则不会将配置自动装入容器中。
WebMvcConfigurer接口实现的东西多,我们在这里就说明我们需要实现的是addInterceptors方法。
@Override
public void addInterceptors(InterceptorRegistry registry) {
WebMvcConfigurer.super.addInterceptors(registry);
}
我们需要把刚才写的自定义拦截器引用进来。
LoginInterctor loginInterctor=new LoginInterctor();
上面写的可以正常使用,但是Java是面向对象编程,所以应该面对接口编程CSDN
所以应该写
HandlerInterceptor loginInterctor = new LoginInterctor();
写应该拦截什么,放行什么
addPathPatterns是被拦截
excludePathPatterns是被放行
registry.addInterceptor(loginInterctor)
.excludePathPatterns( path)
.addPathPatterns(path1);
利用数组来写入需要拦截以及放行的路径,在后续可有注解@ConditionalOnProperty来进行优化
String path []={"/test"};
String path1 []={"/api"};
最后我们写配置类Controller
@GetMapping("/test")
@ResponseBody
public String test() {
return "test";
}
@GetMapping("/api")
@ResponseBody
public String api() {
return "api";
}
最后
以上就是能干白云为你收集整理的Interceptor拦截器的全部内容,希望文章能够帮你解决Interceptor拦截器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复