在Websphere Application Server Liberty Profile V8.5中是否可以应用跨源资源共享(CORS)?我查阅了红皮书,但没有发现IBM提到过相关内容。(http://www.redbooks.ibm.com/abstracts/sg248076.html?Open)
对于我来说,像这样以编程方式设置标头是不可行的:
Access-Control-Allow-Origin: *
在Websphere Application Server Liberty Profile V8.5中是否可以应用跨源资源共享(CORS)?我查阅了红皮书,但没有发现IBM提到过相关内容。(http://www.redbooks.ibm.com/abstracts/sg248076.html?Open)
对于我来说,像这样以编程方式设置标头是不可行的:
Access-Control-Allow-Origin: *
WEB-INF / lib
文件夹中:
在您的 web.xml
中,您需要添加以下规则:<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
从2016年1月Beta版开始(编辑:现在在Liberty 8559中也支持),WebSphere Liberty可以原生地支持CORS。您只需使用所需的CORS选项配置server.xml,以下是一个示例:
<cors domain="/sampleApp/path"
allowedOrigins="https://alice.com:8090"
allowedMethods="GET, DELETE, POST"
allowedHeaders="Accept, MyRequestHeader1"
exposeHeaders="MyResponseHeader1"
allowCredentials="true"
maxAge="3600" />
从ArthurDM扩展到CORS:
最终,以下CORS设置起了作用:
<cors domain="/ibm/api"
allowedOrigins="http://localhost:9080"
allowedMethods="GET, POST, PUT, DELETE"
allowedHeaders="Accept, Accept-Language, Content-Language, Content-Type"
exposeHeaders="Content-Type"
allowCredentials="true"
maxAge="3600" />
对于那些在使用IBM Websphere应用服务器时寻找解决方法并寻求应用CORS的答案的人,你可以通过编写过滤器程序实现此功能。我知道这个问题的提出者希望得到一个不需要使用Java代码或其他方式的答案... 但是这个答案可能会对其他人有所帮助。 编写一个过滤器程序来让你能够以编程方式设置响应头,例如:
public class YourFilter implements javax.servlet.Filter{
@Override
public void doFilter(ServletRequest request,ServletResponse servletResponse , FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse ) servletResponse ;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers","Access-Control-Allow-Origin, X-Requested-With", bla,bla...);
}
}