加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Spring Boot配置拦截器及实现跨域访问

发布时间:2020-12-15 01:53:07 所属栏目:大数据 来源:网络整理
导读:拦截器功能强大,能够深入方法前后,常应用于日志记录、权限检查和性能检测等,几乎是项目中不可或缺的一部分,本文就来实现Spring Boot自定义拦截器的配置。 理论指导 问 :Spring Boot怎么配置拦截器? 答 :配置一个拦截器需要两步完成。 自定义拦截器 ,
URL 说明 是否允许通信
同一域名下 允许
同一域名下不同文件夹 允许
同一域名,不同端口 不允许
同一域名,不同协议 不允许
域名和域名对应ip 不允许
主域相同,子域不同 不允许
同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
不同域名 不允许 上面代码是可以实现拦截器基本功能,但是这样是不可以跨域访问的,前端请求接口会有报错:

"Access-Control-Allow-Origin",request.getHeader("Origin""Access-Control-Allow-Credentials","true"

②在preHandle中调用这个方法。

   startTime ="startTime"

完整代码:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

拦截器功能强大,能够深入方法前后,常应用于日志记录、权限检查和性能检测等,几乎是项目中不可或缺的一部分,本文就来实现Spring Boot自定义拦截器的配置。

理论指导

:Spring Boot怎么配置拦截器?
:配置一个拦截器需要两步完成。
  1. 自定义拦截器,实现HandlerInterceptor这个接口。这个接口包括三个方法,preHandle是请求执行前执行的,postHandler是请求结束执行的,但只有preHandle方法返回true的时候才会执行,afterCompletion是视图渲染完成后才执行,同样需要preHandle返回true,该方法通常用于清理资源等工作。
    注册拦截器。 作用是确定拦截器和拦截的URL。需要继承并重写addInterceptor方法,已经过时了!!

代码实现

目录结构:

TimeCostInterceptor是一个功能齐全的拦截器,需要用到util里面的工具类,由于代码较多,感兴趣的可以到中查看源码。

具体代码:

MyInterceptor.java

MyInterceptor </span><span style="color: #008000;"&gt;/**</span><span style="color: #008000;"&gt; * preHandle在执行Controller之前执行,返回true,则继续执行Contorller * 返回false则请求中断。 </span><span style="color: #008000;"&gt;*/</span><span style="color: #000000;"&gt; @Override </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;boolean</span><span style="color: #000000;"&gt; preHandle(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object o) </span><span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; Exception { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;只有返回true才会继续向下执行,返回false取消当前请求 </span> <span style="color: #0000ff;"&gt;long</span> startTime =<span style="color: #000000;"&gt; System.currentTimeMillis(); httpServletRequest.setAttribute(</span>"startTime"<span style="color: #000000;"&gt;,startTime); </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;; } </span><span style="color: #008000;"&gt;/**</span><span style="color: #008000;"&gt; * postHandle是在请求执行完,但渲染ModelAndView返回之前执行 </span><span style="color: #008000;"&gt;*/</span><span style="color: #000000;"&gt; @Override </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; postHandle(HttpServletRequest httpServletRequest,Object o,ModelAndView modelAndView) </span><span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; Exception { </span><span style="color: #0000ff;"&gt;long</span> startTime = (Long) httpServletRequest.getAttribute("startTime"<span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;long</span> endTime =<span style="color: #000000;"&gt; System.currentTimeMillis(); </span><span style="color: #0000ff;"&gt;long</span> executeTime = endTime -<span style="color: #000000;"&gt; startTime; StringBuilder sb </span>= <span style="color: #0000ff;"&gt;new</span> StringBuilder(1000<span style="color: #000000;"&gt;); SimpleDateFormat simpleDateFormat </span>= <span style="color: #0000ff;"&gt;new</span> SimpleDateFormat("yyyy-MM-dd HH:mm:ss"<span style="color: #000000;"&gt;); String date </span>= simpleDateFormat.format(<span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Date()); sb.append(</span>"-----------------------").append(date).append("-------------------------------------n"<span style="color: #000000;"&gt;); sb.append(</span>"URI : ").append(httpServletRequest.getRequestURI()).append("n"<span style="color: #000000;"&gt;); sb.append(</span>"CostTime : ").append(executeTime).append("ms").append("n"<span style="color: #000000;"&gt;); sb.append(</span>"-------------------------------------------------------------------------------"<span style="color: #000000;"&gt;); System.out.println(sb.toString()); } </span><span style="color: #008000;"&gt;/**</span><span style="color: #008000;"&gt; * afterCompletion是在整个请求执行完毕后执行 </span><span style="color: #008000;"&gt;*/</span><span style="color: #000000;"&gt; @Override </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; afterCompletion(HttpServletRequest httpServletRequest,Exception e) </span><span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; Exception { }

}

RegisterInterceptor.java

RegisterInterceptor registry.addInterceptor( MyInterceptor()).addPathPatterns("/**"

拦截效果


更新

跨域访问

由于JavaScript同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。具体的看下表(来源于):

    推荐文章
      热点阅读