springboot实现拦截器(配置多个拦截器)

25 篇文章 0 订阅

拦截器方法介绍:

	1. preHandle(......)方法:当url已经匹配到controller层中某个方法时,在方法执行前执行
	它会决定是否放行,返回true,放行,返回false,不会执行
	2.  postHandle(……) 方法:url 匹配到Controller 中的某个方法,且执行完了该方法,
	但是在 DispatcherServlet 视图渲染之前执行。在这个方法中有个 ModelAndView 参数,可以在此做一些修改动作。
	3. afterCompletion(……) 方法:在整个请求处理完成后(包括视图渲染)执行,
	做一些资源的清理工作,这个方法只有在 preHandle(……) 被成功执行后并且返回true才会被执行。

创建自己的拦截器类:
拦截器1:

package com.wty.springboot.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@Component
public class MyInterceptoroOne implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("在请求到达方法之前调用,通过了,才会去执行目标方法,不通过不会执行");
        String token = request.getParameter("token");
        if(token != null){
            return true;
        }else{
            return false;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

拦截器2:

package com.wty.springboot.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@Component
public class MyInterceptorTwo implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("方法前调用");
        String token = request.getParameter("token");
        if(token != null){
            return true;
        }else{
            return false;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

注册拦截器
创建配置类

SpringBoot 1.5版本都是靠重写 WebMvcConfigurerAdapter 的方式来添加自定义拦截器,
消息转换器等。SpringBoot2.0 后,该类被标识为@Deprecated。官方推荐直接实现
WebMvcConfigurer(推荐)或者直接继承WebMVCConfigurationSupport
package com.wty.springboot.config;

import com.wty.springboot.interceptor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;



@Configuration
public class Webconfig implements WebMvcConfigurer {

    @Resource
    private MyInterceptoroOne myInterceptorone;
    
	@Resource
    private MyInterceptorTwo myInterceptortwo;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	//第一个拦截器
        registry.addInterceptor(myInterceptorone)
        .addPathPatterns("/**");//拦截所有请求
		//第二个拦截器
        registry.addInterceptor(myInterceptortwo)
        .addPathPatterns("/**");
    }
}
WebMvcConfigurer常用接口:
1.addInterceptors:拦截器
2.addViewControllers:页面跳转
3. addResourceHandlers:静态资源
4. configureDefaultServletHandling:默认静态资源处理器
5. configureViewResolvers:视图解析器
6. configureContentNegotiation:配置内容裁决的一些参数
7. addCorsMappings:跨域
8. configureMessageConverters:信息转换器

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor())
                .addPathPatterns("/**")//拦截所有请求
                .excludePathPatterns(  //不需要拦截的请求
                        "/iot/user/**",
                        "/",
                        "/static/**",
                        "/**/*.ico",
                        "/**/*.png",
                        "/**/*.html",
                        "/error",
                        "/collect/iot/setSlaveDataDB"
 
                );

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring MVC 中配置多个拦截器可以通过以下步骤完成: 1. 创建拦截器类:首先,你需要创建多个拦截器类,这些类需要实现 `HandlerInterceptor` 接口。这个接口包含了三个方法 `preHandle`、`postHandle` 和 `afterCompletion`,你可以在这些方法中编写自定义的拦截逻辑。 2. 配置拦截器:在 Spring MVC 的配置文件中,通常是 `springmvc-servlet.xml`(如果你是使用 XML 配置的话),或者是 `WebConfig.java`(如果你是使用 Java 配置的话),添加拦截器配置。 - XML 配置方式: ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/path1/**"/> <!-- 设置拦截路径1 --> <bean class="com.example.Interceptor1"/> <!-- 设置拦截器1 --> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/path2/**"/> <!-- 设置拦截路径2 --> <bean class="com.example.Interceptor2"/> <!-- 设置拦截器2 --> </mvc:interceptor> </mvc:interceptors> ``` - Java 配置方式: ```java @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new Interceptor1()).addPathPatterns("/path1/**"); // 设置拦截路径1和拦截器1 registry.addInterceptor(new Interceptor2()).addPathPatterns("/path2/**"); // 设置拦截路径2和拦截器2 } } ``` 你可以根据需要添加更多的拦截器配置。 3. 配置拦截路径:在拦截器配置中,你可以使用 `path` 或者 `pathPatterns` 属性来设置拦截路径。使用 `path` 属性可以设置单个路径,使用 `pathPatterns` 属性可以使用 Ant 风格的通配符来匹配多个路径。 例如: - `path="/path"`:匹配单个路径 - `pathPatterns="/path/*"`:匹配 `/path/abc`、`/path/def` 等路径 这样,当请求的 URL 匹配到拦截路径时,对应的拦截器将会被调用。你可以根据实际需求配置多个拦截器,并按照顺序执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值