【发布时间】:2015-03-22 06:20:58
【问题描述】:
我正在尝试使用 Spring Security 设置 Spring Boot 应用程序并公开 REST 服务。
我在这里添加了建议的 CORS 过滤器:https://spring.io/guides/gs/rest-service-cors/ 但这似乎还不够。
代码:
@Component
public class CrossOriginRequestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Authorization");
chain.doFilter(req, response);
}
@Override
public void destroy() {
}
}
jQuery 请求如下所示:
var bytes = btoa("admin" + ":" + "admin");
$.ajax({
type: 'GET',
url: '[url removed]',
headers: {"Authorization": "Basic " + bytes},
xhrFields: {
withCredentials: true
},
success: function(a,b,c) {
console.log(a);
console.log(b);
console.log(c);
},
error: function (e1,e2,e3) {
console.log(e1);
console.log(e2);
console.log(e3);
}
});
我收到此错误: XMLHttpRequest 无法加载 [url 省略]。当凭证标志为真时,不能在“Access-Control-Allow-Origin”标头中使用通配符“*”。 Origin 'http://localhost:8080' 因此不允许访问。
P.S:我从 localhost:8080 访问远程服务器,猜猜这就是为什么它在 Origin 中这样说的原因。
有人知道我错过了什么吗? 在 Stack 看到一些代码,人们检查它是否是一个 OPTIONS 请求,但我没有找到 ServletRequest.getMethod,此外,它似乎有点 hacky?
【问题讨论】:
-
你是用tomcat来部署的吗?
-
Jetty 8,来自 Spring Boot
标签: jquery spring-security cross-domain spring-boot