springboot 拦截器

拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强

应用场景:解决一些共性问题,比如权限验证、乱码等

spring boot中使用拦截器:

1、创建一个类MyWebConfig继承WebMvcConfigurerAdapter,并重写addInterceptors方法

@Configuration

public class MyWebConfig extends WebMvcConfigurerAdapter {

@Autowired

MyiInterceptor myiInterceptor;

/**

*注册 拦截器

*/

@Override

public void addInterceptors(InterceptorRegistry registry) {

 //多个拦截器组成一个拦截器链

// addPathPatterns添加拦截规则

// excludePathPatterns排除拦截

//拦截器myiInterceptor只拦截'/111'的请求,不拦截'/helloWorld'

registry.addInterceptor(myiInterceptor).addPathPatterns("/111").excludePathPatterns("/helloWorld");

super.addInterceptors(registry);

}

}

2、创建一个自定义拦截器MyiInterceptor实现HandlerInterceptor接口,重写所有的方法实现自己的业务

@Component

public classMyiInterceptorimplementsHandlerInterceptor {

/**

*返回值为true请求会继续执行,false请求终止

*@paramhttpServletRequest请求请求

*@paramhttpServletResponse响应对象

*@paramo被拦截的对象

*@return

*@throwsException

*/

@Override

public booleanpreHandle(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object o)throwsException {

System.out.println("preHandle方法执行了。。。");

httpServletRequest.setCharacterEncoding("utf-8");//设置请求编码

httpServletResponse.setCharacterEncoding("utf-8");//设置响应编码

//示例  没有登录时, 转发到登录页  返回false中断请求

//httpServletRequest.getRequestDispatcher("/login.html").forward(httpServletRequest,httpServletResponse);

//return false;

return true;

}

/**

*

*@paramhttpServletRequest请求请求

*@paramhttpServletResponse响应对象

*@paramo被拦截的对象

*@parammodelAndView可以在这个对象中设置返回的视图和试图内容

*@throwsException

*/

@Override

public voidpostHandle(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object o,ModelAndView modelAndView)throwsException {

System.out.println("postHandle方法执行了。。。。");

}

/**

*请求执行完销毁数据

*@paramhttpServletRequest请求请求

*@paramhttpServletResponse响应对象

*@paramo被拦截的对象

*@parame

*@throwsException

*/

@Override

public voidafterCompletion(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object o,Exception e)throwsException {

System.out.println("afterCompletion方法执行了。。。");

}

}

多拦截器工作流程:

多拦截器工作流程



拦截器和过滤器的区别:

过滤器Filter依赖servlet容器,基于回调函数,作用范围大

拦截器Interceptor依赖框架容器,基于反射机制,只过滤请求

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,777评论 19 139
  • 本文包括:1、Filter简介2、Filter是如何实现拦截的?3、Filter开发入门4、Filter的生命周期...
    廖少少阅读 12,083评论 3 56
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,147评论 18 399
  • 阿三是个失败者,他成绩优异,名列前茅。 阿三是个失败者,他追到了校花,羡煞旁人。 阿三是个失败者,他事业有成,家庭...
    小怪兽的故事阅读 3,352评论 4 14
  • 实话生活 体悟人生 今天是2016年12月16日 天气晴天 温度10-19度 今天早上四点多起床 起来了以后 先按...
    木风恒阅读 1,111评论 0 0