写一个java的springboot拦截器
时间: 2023-05-26 17:04:57 浏览: 90
拦截器是Spring Boot应用程序中一个很常见的组件,用于在请求开始或结束时执行一些操作,例如验证请求、记录请求信息等。下面是一个简单的拦截器示例,用于记录请求开始和结束时间:
```
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class RequestInterceptor implements HandlerInterceptor {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
LOGGER.info("Request URL::" + request.getRequestURL().toString() + ":: Start Time=" + System.currentTimeMillis());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
LOGGER.info("Request URL::" + request.getRequestURL().toString() + ":: Time Taken=" + (System.currentTimeMillis() - (Long)request.getAttribute("startTime")) + "ms");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// This method is called after the response is sent to the client.
}
}
```
可以看到,在这里我们实现了HandlerInterceptor接口,并重写了其中的三个方法:preHandle、postHandle和afterCompletion。在preHandle方法中记录请求的开始时间,在postHandle方法中计算请求处理时间,最终输出日志信息。在这个拦截器中,我们没有实现任何额外的验证逻辑,但在实际应用中,我们可以在这些方法中编写更多的代码,如验证用户身份、检查请求参数等。
接下来,我们需要将这个拦截器注册到Spring Boot应用程序中。可以通过在我们的Spring Boot配置类中添加以下@Bean方法来实现:
```
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor());
}
}
```
这里我们扩展了WebMvcConfigurer接口,并重写了其中的addInterceptors方法,以将我们的拦截器注册到拦截器链中。现在,我们的拦截器已经可以在每个请求中截取HTTP请求并输出日志信息了。
阅读全文