Tomcat 7 and disabling CORS
Tomcat 7 is a fantastic Java Servlet container and I’ve used it to serve a number of web applications. In addition to serving out web browser content, it can be used to handle an API backend.
I ran into a challenge with serving Bonita BPM and the BonitaSoft REST API is the Cross-Origin-Resource-Sharing (CORS) default implementation. Put simply, it was too restrictive for my application. I was using an AngularJS frontend to access resources in Bonita BPM (users, processes, etc…) and I was consistently getting this error in Chrome:
XMLHttpRequest cannot load http://localhost:8080/bonita/API/user/1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9888' is therefore not allowed access.
I’ve run into this problem before, and I figured that I could use a JSONP request (this will bypass the CORS restriction). For one application, that worked very well. Specifically, I could make a login request and parse the response for success or failure. However, in order to continue to use the full API, I needed to get around the security restrictions.
The simplest way to disable the CORS restrictions on Tomcat 7 is to make an edit to the web.xml file in the CATALINA_HOME/conf directory. Add (or edit) this code just before the closing tag:
<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>
Once this has been done, restart Tomcat and make the API request. No more Access-Control-Allow-Origin error.