Bu yaklaşım, belirli bir filtreyi ve aşağıdakilerin tümünü önlemek istediğinizde işe yarar. Örneğin, eğer iyi çalışmalıdır. uygulama mantığınıza izin vermek yerine (GuiceFilter gibi bir filtre aracılığıyla) bazı içeriği sunucu uygulaması kapsayıcınızda statik kaynaklar olarak sunmak istiyorsanız:
Statik kaynak dosyalarınızın bulunduğu klasörü varsayılan sunucu uygulamasına eşleyin. Bir sunucu uygulaması filtresi oluşturun ve web.xml'nizdeki GuiceFilter'in önüne koyun . Oluşturduğunuz filtrede, bazı istekleri GuiceFilter'e ve diğerlerini doğrudan dağıtıcıya iletmek arasında ayrım yapabilirsiniz. Örnek aşağıdaki ...
web.xml
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>StaticResourceFilter</filter-name>
<filter-class>com.project.filter.StaticResourceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>StaticResourceFilter</filter-name>
<url-pattern>/static/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
StaticResourceFilter.class
public class StaticResourceFilter implements Filter {
private final static Logger LOGGER = LoggerFactory.getLogger(StaticResourceFilter.class);
private static final String RESOURCE_PATH = "/static/";
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
LOGGER.info("StaticResourceFilter initialized");
}
@Override
public void doFilter(final ServletRequest request, final ServletResponse response,
final FilterChain chain) throws IOException, ServletException {
String path = ((HttpServletRequest) request).getServletPath();
if (path.toLowerCase().startsWith(RESOURCE_PATH)) {
request.getRequestDispatcher(path).forward(request, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
LOGGER.info("StaticResourceFilter destroyed");
}
}
Ne yazık ki, takip edenleri korurken filtre zincirinde sadece tek bir adımı atlamak istiyorsanız, bu işe yaramayacaktır.