Spring Boot配置拦截器及实现跨域访问
发布时间:2020-12-15 01:53:07 所属栏目:大数据 来源:网络整理
导读:拦截器功能强大,能够深入方法前后,常应用于日志记录、权限检查和性能检测等,几乎是项目中不可或缺的一部分,本文就来实现Spring Boot自定义拦截器的配置。 理论指导 问 :Spring Boot怎么配置拦截器? 答 :配置一个拦截器需要两步完成。 自定义拦截器 ,
拦截器功能强大,能够深入方法前后,常应用于日志记录、权限检查和性能检测等,几乎是项目中不可或缺的一部分,本文就来实现Spring Boot自定义拦截器的配置。
理论指导
问:Spring Boot怎么配置拦截器?
答:配置一个拦截器需要两步完成。
注册拦截器。 作用是确定拦截器和拦截的URL。需要继承并重写addInterceptor方法,已经过时了!!
代码实现目录结构: TimeCostInterceptor是一个功能齐全的拦截器,需要用到util里面的工具类,由于代码较多,感兴趣的可以到中查看源码。 具体代码: MyInterceptor.java MyInterceptor
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
* preHandle在执行Controller之前执行,返回true,则继续执行Contorller
* 返回false则请求中断。
</span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">boolean</span><span style="color: #000000;"> preHandle(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object o)
</span><span style="color: #0000ff;">throws</span><span style="color: #000000;"> Exception {
</span><span style="color: #008000;">//</span><span style="color: #008000;">只有返回true才会继续向下执行,返回false取消当前请求 </span>
<span style="color: #0000ff;">long</span> startTime =<span style="color: #000000;"> System.currentTimeMillis();
httpServletRequest.setAttribute(</span>"startTime"<span style="color: #000000;">,startTime);
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
}
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
* postHandle是在请求执行完,但渲染ModelAndView返回之前执行
</span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> postHandle(HttpServletRequest httpServletRequest,Object o,ModelAndView modelAndView) </span><span style="color: #0000ff;">throws</span><span style="color: #000000;"> Exception {
</span><span style="color: #0000ff;">long</span> startTime = (Long) httpServletRequest.getAttribute("startTime"<span style="color: #000000;">);
</span><span style="color: #0000ff;">long</span> endTime =<span style="color: #000000;"> System.currentTimeMillis();
</span><span style="color: #0000ff;">long</span> executeTime = endTime -<span style="color: #000000;"> startTime;
StringBuilder sb </span>= <span style="color: #0000ff;">new</span> StringBuilder(1000<span style="color: #000000;">);
SimpleDateFormat simpleDateFormat </span>= <span style="color: #0000ff;">new</span> SimpleDateFormat("yyyy-MM-dd HH:mm:ss"<span style="color: #000000;">);
String date </span>= simpleDateFormat.format(<span style="color: #0000ff;">new</span><span style="color: #000000;"> Date());
sb.append(</span>"-----------------------").append(date).append("-------------------------------------n"<span style="color: #000000;">);
sb.append(</span>"URI : ").append(httpServletRequest.getRequestURI()).append("n"<span style="color: #000000;">);
sb.append(</span>"CostTime : ").append(executeTime).append("ms").append("n"<span style="color: #000000;">);
sb.append(</span>"-------------------------------------------------------------------------------"<span style="color: #000000;">);
System.out.println(sb.toString());
}
</span><span style="color: #008000;">/**</span><span style="color: #008000;">
* afterCompletion是在整个请求执行完毕后执行
</span><span style="color: #008000;">*/</span><span style="color: #000000;">
@Override
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> afterCompletion(HttpServletRequest httpServletRequest,Exception e) </span><span style="color: #0000ff;">throws</span><span style="color: #000000;"> Exception {
}
} RegisterInterceptor.java RegisterInterceptor
registry.addInterceptor( MyInterceptor()).addPathPatterns("/**"
拦截效果更新 跨域访问由于JavaScript同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。具体的看下表(来源于):
"Access-Control-Allow-Origin",request.getHeader("Origin""Access-Control-Allow-Credentials","true"
②在preHandle中调用这个方法。 startTime ="startTime"
完整代码: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |