Я создал пользовательский фильтр и добавил запись в web.xml
:
<filter>
<filter-name>Content Security Policy</filter-name>
<filter-class>net.myapp.security.csp.CSPFilter</filter-class>
<init-param>
<param-name>CONTENT_SECURITY_POLICY</param-name>
<param-value>some_policy:here</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Content Security Policy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Когда я проверяю путь WEB-INF/classes/net/myapp/security/csp
, файл класса существует.Это также верно, когда я unzip
файл WAR.Тем не менее Tomcat по-прежнему жалуется в файле журнала, что:
SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Фильтр запуска исключения [Политика безопасности содержимого] java.lang.ClassNotFoundException.в org.apache.catalina.core.DefaultInstanceManager.loadClass (DefaultInstanceManager.java:544) в org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged (DefaultInstanceManager.java:5an.Inst.Manager.cat.(DefaultInstanceManager.java:150) в org.apache.catalina.core.ApplicationFilterConfig.getFilter (ApplicationFilterConfig.java:264) в org.apache.catalina.core.ApplicationFilterConfig. (ApplicationFilterConfig.jalgap: 8).core.StandardContext.filterStart (StandardContext.java:4637) в org.apache.catalina.core.StandardContext.startInternal (StandardContext.java:5282) в org.apache.catalina.util.LifecycleBase.start (LifecycleBase.java:150) в org.apache.catalina.core.ContainerBase $ StartChild.call (ContainerBase.java:1421) в org.apache.catalina.core.ContainerBase $ StartChild.call (ContainerBase.java:1411) в java.base / java.util.concurrent.FutureTask..run (FutureTask.java:264) в java.base / java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) в java.base / java.util.concurrent.ThreadPoolExecutor $ Threader.runecec (: 641) в java.base / java.lang.Thread.run (Thread.java:844)
Другие шаги, которые я пробовал:
- Очистить сборку с помощью
maven
- Удалил файл WAR и другие файлы в
Tomcat/webapps
и повторил попытку. - Проверены права доступа к файлу.
CSPFilter.java:
package net.myapp.security.csp;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.servlet.*;
import javax.servlet.http.*;
public class CSPFilter
implements Filter {
private FilterConfig config;
private String csp_;
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
csp_ = config.getInitParameter("CONTENT_SECURITY_POLICY");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Content-Security-Policy", csp_);
chain.doFilter(request, response);
}
@Override
public void destroy(){}
}
Редактировать:
Уточнить: Фильтр работает! Но, Tomcat по-прежнему жалуется, что класс не найден.Из-за этого Context
также не загружается.
19-Jun-2018 12: 11: 45.198 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Один или несколько фильтров не удалось запустить.Полная информация будет найдена в соответствующем файле журнала контейнера
19-Jun-2018 12: 11: 45.199 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/ dev] сбой запуска из-за предыдущих ошибок