Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何启用CORS?_Java_Angularjs_Cors_Httpresponse - Fatal编程技术网

Java 如何启用CORS?

Java 如何启用CORS?,java,angularjs,cors,httpresponse,Java,Angularjs,Cors,Httpresponse,我需要在ApacheTomcat(7.0.52)中为从我的web到我的java服务器的跨域请求激活CORS 我在AngularJS中使用GET、PUT、OPTIONS和POST方法。例如: $http.get("http://domainWithTomcat.net/javaAppName/api/Picking").success(function (result) { $scope.recepcionesPicking = result; $scope.startPagina

我需要在ApacheTomcat(7.0.52)中为从我的web到我的java服务器的跨域请求激活CORS

我在AngularJS中使用GET、PUT、OPTIONS和POST方法。例如:

$http.get("http://domainWithTomcat.net/javaAppName/api/Picking").success(function (result) {
    $scope.recepcionesPicking = result;
    $scope.startPagination();
});
这就是我的web.xml:

<web-app version="3.0" 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_3_0.xsd">
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<listener>
    <listener-class>
        es.rumbosistemas.sctrakker.datos.HibernateContextListenerAndFilter
    </listener-class>
</listener>
<filter>
    <filter-name>HibernateContextListenerAndFilter</filter-name>
    <filter-class>es.rumbosistemas.sctrakker.datos.HibernateContextListenerAndFilter</filter-class>
</filter>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<filter-mapping>
    <filter-name>HibernateContextListenerAndFilter</filter-name>
    <url-pattern>/api/*</url-pattern>
</filter-mapping>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>
<filter>
    <filter-name>FilterSecurity</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>FilterSecurity</filter-name>
    <url-pattern>/Application/*</url-pattern>
    <url-pattern>/api/*</url-pattern>
</filter-mapping>
<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposed.headers</param-name>
        <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param>
    <init-param>
        <param-name>cors.support.credentials</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>cors.preflight.maxage</param-name>
        <param-value>10</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
请求和响应的标题如下所示:

请求头

OPTIONS /APP/api/Session HTTP/1.1
Host: domainWithTomcat.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://www.myWeb.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Access-Control-Request-Headers: accept, content-type
Accept: */*
Referer: http://www.myWeb.com/web/Login/index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8,en;q=0.6
响应头

HTTP/1.1 302 Found
Content-Length: 0
Location: http://myWeb.net/myAppClient/Login/index.html
Server: Microsoft-IIS/8.0
Set-Cookie: JSESSIONID=52886875C222C5E276FBFCB9CED1517F; Path=/SCTM/; HttpOnly
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=6c6b3d5a9861fd850ca4be11e8881705c4f3156c038ab6ca4f4a57a798d12b9b;Path=/;Domain=tomcatDomain.com
Date: Mon, 17 Nov 2014 08:06:11 GMT
我的雄猫在蔚蓝,如果重要的话

好的,多亏了马斯兰,我现在可以登录了,但我还有一个问题。 当我发出一个新请求时,服务器不会放置会话并创建一个新会话,因此我的筛选器会检测到我没有登录,请求失败。有什么想法吗? 我可以在Tomcat中看到将用户名作为会话变量的会话。但对于我提出的每个请求,都会创建一个新会话。好像客户没有保留coockies。。。我不知道


谢谢你的回复

您使用的是SpringMVC,DispatcherServlet默认配置为拦截选项。您需要在web.xml中配置它:

<servlet>
<servlet-name>yourServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
  <param-name>dispatchOptionsRequest</param-name>
  <param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup></servlet>

yourServlet
org.springframework.web.servlet.DispatcherServlet
DispatchOptions请求
真的
1.
检查 downloud cors-filter-2.1.2.jar java-property-utils-1.9.1.jar mvn依赖性


交易公司
cors过滤器
2.1.2
交易公司
java属性utils
1.9.1

和在web.xml中


科尔斯
com.thetransactioncompany.cors.CORSFilter
科尔斯
/*

您可以查看浏览器的开发人员工具并记录响应吗?添加了控制台日志和标题。谢谢你的回复!嗯,这是按规定进行的。Http状态302必须作为网络错误处理。能否将其添加到Angular应用程序$.ajaxSetup({xhrFields:{withCredentials:true},crossDomain:true});我想我也遇到过类似的问题,但我不确定:)有了这个我就可以登录了,这很重要!但是现在我有一个新问题,当我发出一个新请求时,服务器不会放置会话并创建一个新会话,因此我的过滤器会检测到我没有登录,请求失败。知道吗?你为什么需要选项中的会话?
<servlet>
<servlet-name>yourServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
  <param-name>dispatchOptionsRequest</param-name>
  <param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup></servlet>