Spring MVC过滤器获取自定义jquery ajax标头
Posted
技术标签:
【中文标题】Spring MVC过滤器获取自定义jquery ajax标头【英文标题】:Spring MVC filter get custom jquery ajax header 【发布时间】:2014-08-23 15:01:01 【问题描述】:这是交易,任何帮助将不胜感激,因为到目前为止我不知所措。
我在我的 jQuery.ajax 中设置自定义标题,如下所示:
$.ajax(
type:'GET',
url: url,
dataType: 'json',
headers:
'customHeader': 'value',
, etc...
我正在使用带有自定义过滤器的 spring mvc 和 spring security 并获取如下标题:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpServletRequest httpRequest = (HttpServletRequest) request;
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
String header = httpRequest.getHeader('customHeader');
不幸的是,标头始终为空,我尝试过在 ajax 调用中使用 beforeSend 之类的方法,效果仍然相同。任何人都可以请她对此有所了解吗?
Remote Address:127.0.0.1:8080
Request URL:http://localhost:8080/ecom/ws/session
Request Method:OPTIONS
Status Code:401 Unauthorized
Request Headersview parsed
OPTIONS /ecom/ws/session HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Access-Control-Request-Headers: accept, ecom_string_s3c, ecom_client_uuid, content-type
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6
Response Headersview parsed
HTTP/1.1 401 Unauthorized
Date: Wed, 02 Jul 2014 18:15:03 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: ecom_string_s3c, ecom_client_uuid, content-type
Content-Length: 0
Server: Jetty(6.1.26)
【问题讨论】:
为什么不在 ajax 调用中使用data
而不是标头......不要重新发明*** :)
我基本上是在推出自己的 rest 身份验证实现,我需要将身份验证信息存储在标头中,并与 post 数据分开。
***.com/questions/10093053/…
我看了好几次答案很模糊
基本上我需要知道如何从 httpServletRequest 访问我的 java 过滤器中的标头
【参考方案1】:
对于遇到同样问题的人,这是解决此问题的一个选项。
问题出在飞行前请求 (OPTIONS) 上。在您的自定义安全过滤器中,您不想检查这一点,因为自定义标头将不与 OPTIONS 请求一起发送。 OPTION 请求仅用于检查允许哪些方法、来源、标头等。
在您的令牌授权自定义过滤器中,您可以过滤掉这些请求。一个快速的解决方案可能如下所示:
if (methode.equals("OPTIONS"))
log.info("OPTIONS REQUEST NO FILTER");
chain.doFilter(req, res);
else
//Your filter
这样它会跳过您对 OPTION 请求的过滤器,并且您的真实请求将与您的 CORS 过滤器允许的标头一起发送。
祝你好运。
【讨论】:
是的,我找到解决方案后忘记回答这个问题了。你所建议的正是我所做的 这里的methode
是什么以及如何获取请求标头的方法来检查这种情况?以上是关于Spring MVC过滤器获取自定义jquery ajax标头的主要内容,如果未能解决你的问题,请参考以下文章
MVC 自定义过滤器(Filter)实现路由控制异常处理授权处理(获取客户端信息)
Spring webSecurity.ignoring() 不会忽略自定义过滤器
2 个自定义组合框,在 DataTables 中过滤结果,获取 2 个组合框来过滤结果的问题 - JavaScript、jQuery