我正在使用 Aptana IDE 开发一个客户端应用程序,并使用 Spring 开发一个 REST 应用程序。
默认情况下,Aptana 的服务器在 127.0.0.1:8020 上运行,而 Spring 在 127.0.0.1:8080 上运行。
如果我尝试从客户端应用程序向 Spring 应用程序发送 AJAX 调用,它会提示 CORS。
我正在使用 gradle bootrun
运行 Spring 应用。
我尝试将 aptana 配置为使用端口 8080
但是当我尝试访问该页面时,它需要在 Tomcat 服务器中进行身份验证,该服务器在 Spring 中启动,可能与 Tomcat 用户一起使用。我不知道这些凭据,也无法在任何地方找到它们。
关于如何跳过此 CORS 问题以便我可以继续开发的任何想法?
我在服务应用程序中看到了一些关于某些过滤器的信息,正如他们所说,它们可能会跳过 CORS 问题。我尝试使用一种解决方案,但结果还是一样。
更新 1
我有一个 gradle 项目。我使用 gradle bootrun
运行项目。
这是我的src\main\webapp\WEB-INF\web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<filter>
<filter-name>cors</filter-name>
<filter-class>com.ihbs.security.CORSFilter</filter-class>
</filter>
</web-app>
CORSFilter
class CORSFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
System.out.println("aaaaaaaaaaaaaaaaa");
response.addHeader("Access-Control-Allow-Origin", "*");
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.addHeader("Access-Control-Allow-Headers", "Authorization");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Access-Control-Max-Age", "1");
}
filterChain.doFilter(request, response);
}
}
当我调用服务器时,我从未在控制台中看到打印的 aaaaaa
并且在响应中也看不到这些 header 。
更新 2
我尝试使用 Apache CorsFilter:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<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>
</web-app>
我仍然看不到响应中的 header 。我感觉我的 web.xml 文件不在正确的位置 src\main\webapp\WEB-INF\web.xml
。
我注意到服务器返回 401
代码,即 Unauthorized Access
。
最佳答案
Apache Tomcat includes support for CORS (Starting from Tomcat version 7.0.41). The full documentation can be found here: http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter
下面是这些文档中的一个示例,演示了最小的 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>
关于java - 跳过 Spring 中的 CORS 并配置项目以使用 Aptana,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407061/