java

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()
    {
    }
}
上一篇 下一篇

猜你喜欢

热点阅读