springboot打包发布tomcat,filter报错
2019-05-21 本文已影响0人
岁月静好忄
org.apache.catalina.core.StandardContext.filterStart Exception starting filter [XXXX]
字面意思:过滤器启动异常
说明
springboot打包使用外部tomcat的时候,过滤器没被成功实例化
解决
1、MyFilterConfig(过滤器配置)
@Configuration
public class MyFilterConfig
{
@Bean
public ReplyHeaderFilter replyHeaderFilter()
{
Map<String, String> params = new HashMap<String, String>();
params.put("Cache-Control", "max-age=2592000");
return new ReplyHeaderFilter(params);
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new DelegatingFilterProxy("replyHeaderFilter"));
registrationBean.setName("replyHeaderFilter");
return registrationBean;
}
}
2、ReplyHeaderFilter(过滤器--Response头部携带信息 )
/**
* 过滤器--Response头部携带信息
*/
public class ReplyHeaderFilter implements Filter
{
private String[][] replyHeaders = {{}};
/*构造方法1--使用map参数*/
public ReplyHeaderFilter(Map<String, String> params)
{
this.initMap(params);
}
/*构造方法2--使用配置文件*/
public ReplyHeaderFilter(FilterConfig config)
{
this.initConfig(config);
}
public void initConfig(FilterConfig config)
{
if(config==null)
{
return;
}
Enumeration names = config.getInitParameterNames();
ArrayList<String[]> tmp = new ArrayList<String[]>();
while (names.hasMoreElements())
{
String name = (String)names.nextElement();
String value = config.getInitParameter(name);
System.out.println("Adding header name: " + name + "='" + value + "'");
String[] pair = {name, value};
tmp.add(pair);
}
replyHeaders = new String[tmp.size()][2];
tmp.toArray(replyHeaders);
}
public void initMap(Map<String, String> params)
{
if(params==null)
{
return;
}
ArrayList<String[]> tmp = new ArrayList<String[]>();
for(Map.Entry<String, String> entry:params.entrySet())
{
String name = entry.getKey();
String value = entry.getValue();
System.out.println("Adding header name: " + name + "='" + value + "'");
String[] pair = {name, value};
tmp.add(pair);
}
replyHeaders = new String[tmp.size()][2];
tmp.toArray(replyHeaders);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletResponse httpResponse = (HttpServletResponse)response;
for (int n = 0; n < replyHeaders.length; n++)
{
String name = replyHeaders[n][0];
String value = replyHeaders[n][1];
httpResponse.setHeader(name, value);
}
chain.doFilter(request, response);
}
public void destroy()
{
}
}