【发布时间】:2014-09-15 13:36:00
【问题描述】:
我们正在使用 Java Spring 构建一个 rest api。我们正在使用 angularjs 作为前端。其余的 api 在一个域中,而 angularjs 在另一个域中。最初,当我尝试从 Angular 向其余 api 发出“POST”请求时,它给出了 CORS 错误。然后我们通过在后端设置 CORS 过滤器解决了这个问题。但是当我们尝试执行获取请求时,它会抛出 401 未经授权的错误。那是因为,我们的 get 请求是“not-a-simple-request”,因为请求的内容类型为 application/json,并且标头具有“授权”(因为我们使用的是基本身份验证)。因此,浏览器在发送“GET”请求之前向服务器发送预检“OPTIONS”请求。因此,Spring 安全性通过拦截 url 为“OPTIONS”请求引发 401 错误。那是因为“选项”请求没有任何凭据。所以为了克服这个问题,我们在 spring-security.xml 中的拦截 url 中放置了 method="GET"。这已经解决了这个问题。但这是一个好习惯,在拦截网址中指定方法吗?我们遵循的流程也是一种好的做法吗?
【问题讨论】:
标签: spring angularjs spring-security cors