问题记录:springboot添加拦截器,过滤器;解决拦截器不生效及生效后无法调用controller 方法

2023-05-16

1.添加拦截器

package com.example.saina.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

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

/**
 * 自定义拦截器
 * 自定义拦截器后,需要配置进Spring
 * 
 * @author dh
 * @since 2023/02/07
 */
public class TokenInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //跨域请求会首先发一个option请求,直接返回正常状态并通过拦截器
        if (request.getMethod().equals("OPTIONS")) {
            response.setStatus(HttpServletResponse.SC_OK);
            return true;
        }
         /**
         * 可以在此处添加校验
         */
  
        return false;
    }
}

2.添加过滤器,过滤不需要拦截的路径

package com.example.saina.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 *  TokenInterceptor 自定义拦截器后,需要配置进Spring
 * 也可以mapping,跨域设置
 * @author dh
 * 
 * @since 2023/02/07
 */
@Configuration //表明这个类是一个配置类,继承WebMvcConfigurer
public class TokenConfig implements WebMvcConfigurer {

	//添加跨域设置
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedHeaders("*")
                .allowedMethods("*")
                .maxAge(1800)
                .allowedOriginPatterns("*");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        List<String> excludePath = new ArrayList<>();
        //这里用来排除拦截的接口,例如登录前调用的接口
        excludePath.add("/api/login/**");  //登录
        registry.addInterceptor(new TokenInterceptor()) // 注册拦截器
                .addPathPatterns("/**")
                .excludePathPatterns(excludePath);
        WebMvcConfigurer.super.addInterceptors(registry);

    }
}


3.解决拦截器配置后不生效问题

启动类上添加包扫描配置

@ComponentScan(basePackages={"com.example.saina.interceptor"})

4.通过拦截器后,无法正常调用controller接口

可能出现的原因是:添加包扫描后,未扫描到controller下代码
启动类配置添加

@ComponentScan(basePackages={"com.example.saina.interceptor","com.example.saina.controller","com.example.saina.service"})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

问题记录:springboot添加拦截器,过滤器;解决拦截器不生效及生效后无法调用controller 方法 的相关文章

随机推荐