我正在使用jersey 2.18来开发rest api。 (使用tomcat容器)
我想允许从其他域访问客户端。
所以我在代码下面尝试允许跨域请求。
过滤
public class MyCorsFilter implements Filter {
public MyCorsFilter() { }
public void init(FilterConfig fConfig) throws ServletException { }
public void destroy() { }
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
((HttpServletResponse)response).addHeader("Access-Control-Allow-Origin", "*");
chain.doFilter(request, response);
}
}
的web.xml
<filter>
<filter-name>MyCorsFilter</filter-name>
<filter-class>MyCorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyCorsFilter</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
上面的代码正常工作,直到我添加HTTP基本身份验证。
当我添加基本身份验证时,我收到以下错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
当使用开发人员工具检查标题时,我发现以下内容:
请注意,执行OPTIONS
方法时出错。 (我正在使用GET
方法)
任何有关如何添加允许CORS和基本HTTP身份验证的建议都将受到赞赏。
答案 0 :(得分:0)
您可以在web.xml中使用Catalina CORS过滤器配置,如下所示 -
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
答案 1 :(得分:0)
Puneet是对的。
请注意,您可能需要设置一些参数,即:
答案 2 :(得分:0)
实际上,浏览器使用http请求方法“选项”在您的执行请求之前发出预检请求。因此您必须向此请求发送200 OK并允许跨域标头,如
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT");
httpResponse.setHeader("Access-Control-Max-Age", "3600");
httpResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization, Content-Type");
if(httpRequest.getMethod().equals("OPTIONS")){
httpResponse.setStatus(HttpServletResponse.SC_ACCEPTED);
return;
}
找到更多信息