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
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
}