Referencing Environment Variables in web.xml

前端 未结 7 1270
無奈伤痛
無奈伤痛 2020-11-30 01:37

I\'m pre-packaging a JSP web-app that relies on some file path settings found within web.xml. These settings are unknown at packaging time, because they reference a path the

7条回答
  •  天命终不由人
    2020-11-30 02:17

    If you're using Spring - you could pipe FilterConfig through ConfigurableBeanFactory.resolveEmbeddedValue to enable property placeholders interpolation support in web.xml.

    Proxy class for make FilterConfig parameters resolvable.

    public class ResolvableFilterConfig implements FilterConfig {
    
        private final FilterConfig source;
        private final ConfigurableBeanFactory resolver;
    
        public ResolvableFilterConfig(FilterConfig source, ConfigurableBeanFactory resolver) {
            this.source = source;
            this.resolver = resolver;
        }
    
        @Override
        public String getFilterName() {
            return source.getFilterName();
        }
    
        @Override
        public ServletContext getServletContext() {
            return source.getServletContext();
        }
    
        @Override
        public String getInitParameter(String name) {
            final String value = source.getInitParameter(name);
            return resolver.resolveEmbeddedValue(value);
        }
    
        @Override
        public Enumeration getInitParameterNames() {
            return source.getInitParameterNames();
        }
    }
    

    Filter implementation sample code

        @Override
        public void init(FilterConfig config) throws ServletException {
            // configure
            final ServletContext servletContext = config.getServletContext();
            final AbstractApplicationContext aac = (AbstractApplicationContext) getRequiredWebApplicationContext(servletContext);
            final ConfigurableBeanFactory beanFactory = aac.getBeanFactory();
            config = new ResolvableFilterConfig(config, beanFactory);
            // ... do the rest
        }
    

提交回复
热议问题