Java(一百四十八)SpringBoot配置拦截器

88 阅读1分钟

今天我们来学习SpringBoot中的拦截器。

 

拦截器这个玩意,我们之前在SpringMvc中学过,有忘记的同学请移步《Java(一百三十八)SpringMVC拦截器》

 

Filter过滤器是可以拦截所有东西,但是SpringBoot拦截器只能拦截Controller

 

我们需要自定义编写一个拦截器。

 

拦截器需要实现接口HandlerInterceptor,在src/main/java/com目录下创建interceptor目录下创建TestInterceptor.java,代码如下:

package com.example.demo.demos.web.interceptor;
 
 import org.springframework.web.servlet.HandlerInterceptor;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 public class TestInterceptor implements HandlerInterceptor
 {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
     {
         // 执行拦截操作
         System.out.println("TestInterceptor.preHandle");
         // 代码往下进行
         return true;
     }
 }

拦截器到这里就编写完成了,我们需要在javaconfig中将其配置进去。

在src/main/java/com目录下创建config目录下创建InterceptorConfig.java,代码如下:

package com.example.demo.demos.web.config;
 
 import com.example.demo.demos.web.interceptor.TestInterceptor;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 @Configuration
 public class InterceptorConfig implements WebMvcConfigurer {
     @Override
     public void addInterceptors(InterceptorRegistry registry)
     {
         // 注册拦截器 并配置拦截所有方法  除了selectByExample 方法
         registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**").excludePathPatterns("/selectByExample");
     }
 
 }

UserController.java代码如下所示:

package com.example.demo.demos.web.controller;
 
 import com.example.demo.demos.web.dao.User;
 import com.example.demo.demos.web.dao.UserDao;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.util.List;
 
 @Controller
 public class UserController
 {
     /**
      * 定义一个静态常量日志对象
      */
     private static final Logger logger =LoggerFactory.getLogger(UserController.class);
 
     @Autowired
     private UserDao userDao;
 
     @RequestMapping("selectByExample")
     @ResponseBody
     public List<User> selectByExample()
     {
         List<User> list = userDao.selectByExample(null);
 
         // 输出日志信息
         logger.info("selectByExample,info:");
         logger.trace("selectByExample,trace:");
         logger.debug("selectByExample,debug:");
         logger.warn("selectByExample,warn:");
         logger.error("selectByExample,error:");
         return list;
     }
 
     @RequestMapping("testsss")
     @ResponseBody
     public int test()
     {
         int list = (int)userDao.countByExample(null);
         return list;
     }
 }

这就配置完成了,下面我们来测试一下。

首先我们访问:http://localhost:7092/testsss

页面显示:13

控制台输出:TestInterceptor.preHandle

 

接下来我们访问:http://localhost:7092/selectByExample

页面显示:json

控制台未输出任何数据,因此将这个接口排除了。

 

以上大概就是java拦截器的配置。

 

有好的建议,请在下方输入你的评论。