SpringBoot中拦截器的应用(简单易懂)调用service层报错解决方法

相信很多小伙伴都知道拦截器,了解拦截器的使用,懂得它的原理,也会有很多刚入门的小伙伴知道拦截器是个什么东西,但是不会使用,无从下手。这边文章教你使用拦截器,通过白话文的方式让你学会使用拦截器。

工作中遇到了一个问题,就是在每次请求请求之前,需要判断一下他是否是登录状态,然后是正常登录状态才可以请求成功,否则就不会请求到数据。

显然这个地方需要用到拦截器,在spring boot中不需要繁琐的配置文件,只需要注解就可以,很方便,比起ssm,spring那繁琐的配置令人吸啧啧啧,但谁不是从那一步走过来的呢。所以我下边要说的就是在spring boot中使用拦截器

拦截器只需要两个Java文件就可以实现了。

1. 其中一个就是拦截器的配置文件,需要加注解@Configuration,相当于spring的xml文件,还需要继承WebMvcConfigurerAdapter类;
2. 另外一个就是拦截器的处理文件,需要继承HandlerInterceptorAdapter类 ;

代码附上:
LanConfiguration.java:(配置文件)

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;


@Configuration
public class LanConfiguration extends WebMvcConfigurerAdapter {

	//这个bean的作用是,在拦截器中可以调用service层的方法,没有这个配置,调用service时,会报null的错
	@Bean
    public LanSysInterceptor setBean2(){
        //System.out.println("注入了handler");
        return new LanSysInterceptor();
    }
    
	public void addInterceptors(InterceptorRegistry registry) {
		//所有的请求都会被拦截
		registry.addInterceptor(new LanSysInterceptor()).addPathPatterns("/**");
		//除了/user/findUserPassword这个请求,其他所有的请求都会被拦截,
		//registry.addInterceptor(setBean2()).addPathPatterns("/**").excludePathPatterns("/user/findUserPassword");    //对应的不拦截的请求;
	}
}

LanSysInterceptor.java

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


import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;


public class LanSysInterceptor extends HandlerInterceptorAdapter {

    /**
     * 进入拦截器后首先进入的方法
     * 返回false则不再继续执行
     * 返回true则继续执行
     */
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler)throws Exception
    {


        //System.out.println("我是拦截器:我证明我进来了"+map);
		//自己的处理
        return  true;
    }
    /**
     * 生成视图时执行,可以用来处理异常,并记录在日志中
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object arg2, Exception exception){
                //自己的处理//
    }

    /** -
     * 生成视图之前执行,可以修改ModelAndView
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object arg2, ModelAndView arg3)
            throws Exception{
            //自己的处理//
    }
           
}

至于原理是啥,为什么我就不说了,因为移行百度知晓所有
实操大于实践,前行仍需潜修

springboot防sql注入拦截 springboot拦截器注入service_servlet