首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS: X-8月-令牌未发送(错误401)

AngularJS: X-8月-令牌未发送(错误401)
EN

Stack Overflow用户
提问于 2014-07-17 21:22:53
回答 3查看 2K关注 0票数 1

我来这里是因为我什么都试过了我不明白我做错了什么。

作为后端,我使用Spring、Rest和Security。我使用的是基于令牌(完全无状态)的自定义身份验证系统。我还有一个CORS过滤器,因为我的前端应用程序不在同一台服务器上运行。

下面是我在angularJS中所做的工作,当我想访问受保护的资源时,为了获得身份验证:

  • 我创建了一个拦截器来更改每个请求以添加从cookie中找到的令牌
  • 我在请求中添加了一个自定义标题。

我的拦截器是这样做的:

代码语言:javascript
复制
request: function(config) {
            var token = $cookieStore.get("token");
            if (token && token.key) {

                config.headers["X-Auth-Token"]=token.key;

            }
            console.log(config.headers);

            return  config || $q.when(config);
        }

但是,当我试图访问受保护的资源时,即使令牌仍然有效,它也不会将放在请求中!它试图发送一个选项的请求,但失败了一个401错误!

但是,如果我对url参数(比如token=.)做了同样的操作,拦截器就会像预期的那样工作.(我已经实现了两个系统: by参数和header)

我不明白的是为什么标题不像预期的那样放上去?为什么它与邮递员一样完美地运作呢?

帮帮忙,我的头发都快没了.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-19 18:26:58

这样做可能比你接受的答案更干净。

代码语言:javascript
复制
if (request.getMethod().equals("OPTIONS")) {
    response.setStatus(HttpServletResponse.SC_OK);
} else {
    chain.doFilter(request, response);
}
票数 1
EN

Stack Overflow用户

发布于 2014-07-19 22:27:05

我通过这样改变我的过滤器来解决这个问题:

公共空doFilter(ServletRequest req,ServletResponse res,FilterChain链)抛出IOException,ServletException { HttpServletRequest请求= (HttpServletRequest) req;LOG.info(“继续过滤”);

代码语言:javascript
复制
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET,  DELETE, PUT");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Accept, Content-Type, Origin, Authorization, X-Auth-Token");
    response.addHeader("Access-Control-Expose-Headers", "X-Auth-Token");
    if (request.getMethod().equals("OPTIONS")) {
        try {
            response.getWriter().print("OK");
            response.getWriter().flush();
        } catch (IOException e) {
            LOG.error(e.getMessage());
        }
    } else {
        chain.doFilter(request, response);
    }

}
票数 1
EN

Stack Overflow用户

发布于 2014-07-17 21:52:56

不确定这是否能解决您的问题,但是$cookieStore只能获取/设置字符串,因此如下所示:

代码语言:javascript
复制
var token = $cookieStore.get("token");
        if (token && token.key) {

永远不会评估为真。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24813773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档