Q:

CORS JAVA (ERRO)

Estou tentando me conectar a uma API que foi feita em Java, porem sempre da erro ao tentar se conectar (quero alimentar um aplicativo mobile, feito em JS/Cordova).
Ao me conectar (via Browser) eu consigo, a API retorna e tudo funciona normal, mas quando eu instalo o app no celular, da erro 401. Falei com varias pessoas, e parece ser erro do CORS. O Problema é que a API não foi eu que desenvolvi, então pedi o codigo que libera o CORS antes de vir aqui. e ele me passou isso aqui. 
<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>

Alguem sabe me dizer se esta certo? ou qual a melhor forma para se fazer isso?

A:

Um filtro para liberar o CORS seria algo como:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
    chain.doFilter(req, response);
}

Como ele está usando o Apache CorsFilter, acho que falta coisa. 
Seria algo como:
<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>false</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>

Fonte: Using CORS Headers with JAVA

