今天我们来学习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拦截器的配置。
有好的建议,请在下方输入你的评论。