java - 跳过 Spring 中的 CORS 并配置项目以使用 Aptana

标签 java ajax angularjs spring tomcat

我正在使用 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

最佳答案

Enabling CORS on Tomcat很容易。

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/

相关文章:

angularjs - 使用 sinon、mocha、chai 进行 Angular 测试

javascript - 将数组对象 block 合并到单个数组

java - javac生成的名称中的$$是什么意思?

java - 使用 java - 在 switch 中使用 if else 语句?

php - 将通过 AJAX 上传到 DIV 的变量传递到同一个 DIV 中,并用结果替换内容

javascript - 网络应用程序设计思想

java - 在spring Controller 中上传带有其他参数的文件

java - 如何根据存储在 DB 中的值触发 android 中的本地通知?

java - 如何让线程在 Java 中 hibernate 特定的时间?

jquery - 使用 jquery/ajax 更新 django 表单