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().

希望能解决您的问题。