Java REST启用CORS(Access-Control-Allow-Origin)Glassfish

时间:2016-09-08 13:18:27

标签: java angularjs rest glassfish cors

您好我正在使用Glassfish 4.1.1作为服务器和java EE 7在java中使用REST api,作为前端我也在netbeans上使用AngularJS。

我正在关注这个简单的教程 https://www.youtube.com/watch?v=2B3qL7XtKnE 并且成功地创建了后面,但是当我尝试从前端使用GET调用时,我得到了常见错误Access-Control-Allow-Origin。在视频中,女孩使用netbeans附带的跨源共享过滤器模板并解决了这个问题。

package entities;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;

@Provider
public class awdawdCrossOriginResourceSharingFilter implements    ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) {
        response.getHeaders().putSingle("Access-Control-Allow-Origin", "*");
        response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE");
        response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type");
    }

}

但我仍然遇到同样的错误。看过很多指南和教程,但无法修复它。 注意:我是java,netbeans等的初学者。所以你能给我的任何信息都会有所帮助。

由于

以下是浏览器日志的输出:

XMLHttpRequest cannot load http://localhost:8080/AngularBackEnd/rs/customer. Origin http://localhost:8383 is not allowed by Access-Control-Allow-Origin. (09:09:12:047 | error, javascript) at app/index.html

来自angular的电话:

empService.factory('Emps', function($resource){
    return $resource('http://localhost:8080/AngularBackEnd/rs/customer', {}, {
        findAll:{method:'GET', isArray:true}
    })
});

再次感谢。

EDITED

现在我使用https://github.com/ebay/cors-filter并按照他的指南。添加web.xml

<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<filter>
    <filter-name>CORS Filter</filter-name>
    <filter-class>org.ebaysf.web.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CORS Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
</web-app>

要测试我运行命令:

curl -D -"http://localhost:8080/BackEndTest/webresources/service.customer"

这给了我:

Server: GlassFish Server Open Source Edition  4.1.1 
X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  4.1.1  Java/Oracle Corporation/1.8)
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type
Content-Type: application/xml
Date: Fri, 09 Sep 2016 17:50:00 GMT
Content-Length: 6875

正如它所示,它为我提供了所需的访问控制,但我仍然得到与以前相同的错误。

1 个答案:

答案 0 :(得分:0)

客户端必须发送Origin标头。

有关详细信息,请参阅How does Access-Control-Allow-Origin header work?,有关如何通过curl设置标题,请参阅How to send a header using a HTTP request through a curl call?

在你的情况下,你应该能够做这样的事情: curl --header&#34;起源:http://localhost&#34; -D - &#34; http://localhost:8080/BackEndTest/webresources/service.customer&#34;