这连天写了一个拦截器做一个简单的权限验证,前端请求需要在请求头加一个字段来验证权限。
String authenticationValue = request.getHeader("authenticationvalue");
这段代码是我用于获取前端发送字段,但是不管前端如何请求,我获取到的值始终是空,在排除前端代码问题和跨域问题以及拦截器路径配置问题后。发现一个重要的问题。那就是前端实际会请求两次。
**原因:**浏览器会在发送真正请求之前,先发送一个方法为OPTIONS的预检请求 Preflighted requests 这个请求是用来验证本次请求是否安全的。
所有我第一次收到的请求是OPTIONS请求,拦截器获取不到值就拦截了该请求并且中断。
解决办法::只拦截post请求,对拦截器拦截方法加上以下代码
if ("POST".equals(request.getMethod())) {}