Springboot中拦截器的使用

Springboot中拦截器的使用

什么是拦截器:

拦截器正如它的名字,就是我们一些资源在用户没有权限的情况下,不想被访问到,这个时候我们就需要用到拦截器。可以高效的对我们所发出的请求进行拦截操作。

过滤器与拦截器有什么区别:

简单来说,过滤器一般情况用来过滤一些字符,编码等问题,而拦截器一般是对我们发出的请求进行拦截,过滤器比拦截器要先执行。

具体使用步骤

1、编写一个controller,写几个请求:

注意:当前所有请求都可以访问的到,我们以拦截"/lili"这个请求为例子

@RestController
public class HelloController {
     
    /**
     * 这个请求是可以被访问到的
     */
    @RequestMapping(value = {
     "/","/hello"})
    public String getHello(){
     
        return "hello,I am login";
    }
    /**
     * 这个请求可以被访文的到
     */
    @RequestMapping("/hello2")
    public String getHello2(){
     
        return "你可以访问到我";
    }
    /**
     * 这个请求不能被访文的到
     */
    @RequestMapping("/lili")
    public String getLili(){
     
        return "你访问不到我";
    }
}

2、编写拦截器需要实现HanderInterceptor接口

@Slf4j
public class MyInterceptor implements HandlerInterceptor {
     
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     
        log.info("拦截的请求路径是{}" ,request.getRequestURI());
        // 获取session
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
		return user!=null;
    }
}

3、把我们写的拦截器注入到容器中(实现WebMvcConfigurer的addInterceptors)

​ 进行配置拦截器规则。

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
     
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
     
        // 把我们写的过滤器传进来
        registry.addInterceptor(new MyInterceptor())
                // 首先过滤所有请求
                .addPathPatterns("/**")
                // 用来排除需要过滤的请求
                .excludePathPatterns("/","/hello","/hello2");
    }
}

4、运行项目,然后分别访问测试。

1

2

这个没有访问的到

3

打印日志:

2021-11-24 13:16:24.968  INFO 11868 --- [nio-8080-exec-7] com.lili.interceptor.MyInterceptor       : 拦截的请求路径是/lili

你可能感兴趣的:(springboot,spring,boot,spring,java)