拦截器简介
HandlerInterceptor 的功能跟filter类似,但是提供更精细的的控制能力:
在request被响应之前、request被响应之后、视图渲染之前以及request全部结束之后。
我们不能通过拦截器修改request内容,但是可以通过抛出异常(或者返回false)来暂停request的执行
拦截器特点
1、拦截器是基于java反射机制来实现的或是基于动态代理来实现的
2、拦截器不依赖servlet容器。
3、拦截器只对Action起作用。
4、拦截器可以访问Action上下文和值栈中的对象。
5、在Action的生命周期中,拦截器可以多次调用。
使用方法
1、添加类实现HandlerInterceptor
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//判断是否需要拦截
System.out.println("在请求处理之前进行调用(Controller方法调用之前)");
String username = request.getParameter("username");
String password = request.getParameter("password");
if("admin".equals(username) && "123456".equals(password)) {
return true;
}else {
return false;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截时处理逻辑");
System.out.println("请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
}
}
2、添加配置类实现WebMvcConfigurer接口
@Configuration
public class MyConfig implements WebMvcConfigurer {
/**
*
*/
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
}
/**
* 配置内容裁决的一些选项
*/
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
}
/**
*
*/
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
}
/**
* 默认静态资源处理器
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
}
/**
* 格式化配置
*/
@Override
public void addFormatters(FormatterRegistry registry) {
}
/**
* 拦截器配置
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login1");
}
/**
* 静态资源处理
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
/**
* 解决跨域问题
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
}
/**
*视图跳转控制器
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
}
/**
* 配置视图解析器
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
}
/**
*请求参数拦截处理配置
*/
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
}
/**
* 返回值拦截处理配置
*/
@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
}
/**
* 信息转换器
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
}
/**
* 信息转换器
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
}
/**
*
*/
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
}
/**
*
*/
@Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
}
/**
*
*/
@Override
public Validator getValidator() {
return null;
}
/**
*
*/
@Override
public MessageCodesResolver getMessageCodesResolver() {
return null;
}
}