Access-Control-Allow-Origin header 添加 CORS 过滤器后未找到
Access-Control-Allow-Origin header not found after CORS filter added
我使用 AngularJS 实现了一个用于用户身份验证的登录表单。以下是我使用 post 请求登录的服务:
app.factory("loginFactory", function ($http) {
return{
login: function(username, password) {
var data = "username="+username+"&password="+password+"&submit=Login";
return $http({
method: 'POST',
url: 'http://localhost:8080/login',
data: data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
});
}
}
});
当我 运行 它时出现以下错误。
XMLHttpRequest cannot load http://localhost:8080/login.No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access.
我做了一些研究,发现必须在服务器端添加 header。根据此 ,我将以下内容添加到我的休息服务
@Component
public class SimpleCORSFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
但是,我仍然遇到同样的错误。
由于浏览器在 Allow Origin Header 中查找 http://127.0.0.1:8081
,您需要确保将其添加到以下行中:
response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8081");
要获得 http://127.0.0.1:8081
,您可以使用:
request.getRemoteAddr() + ":" + request.getRemotePort();
但是如果浏览器查找 localhost,则查找 :
request.getRemoteHost().
希望能解决您的问题。
我使用 AngularJS 实现了一个用于用户身份验证的登录表单。以下是我使用 post 请求登录的服务:
app.factory("loginFactory", function ($http) {
return{
login: function(username, password) {
var data = "username="+username+"&password="+password+"&submit=Login";
return $http({
method: 'POST',
url: 'http://localhost:8080/login',
data: data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
});
}
}
});
当我 运行 它时出现以下错误。
XMLHttpRequest cannot load http://localhost:8080/login.No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access.
我做了一些研究,发现必须在服务器端添加 header。根据此
@Component
public class SimpleCORSFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
但是,我仍然遇到同样的错误。
由于浏览器在 Allow Origin Header 中查找 http://127.0.0.1:8081
,您需要确保将其添加到以下行中:
response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8081");
要获得 http://127.0.0.1:8081
,您可以使用:
request.getRemoteAddr() + ":" + request.getRemotePort();
但是如果浏览器查找 localhost,则查找 :
request.getRemoteHost().
希望能解决您的问题。