基于java ee 5 api: 如果使用init方法,则Web容器无法将过滤器置于服务中 1.抛出ServletException 2.不在Web容器定义的时间段内返回
我所做的是在init方法中的任何部分工作失败时抛出ServletException。 但是,我观察到的是Web容器启动但所有请求都将返回404错误。有什么建议吗?
答案 0 :(得分:2)
我认为这样做的逻辑是过滤器是处理请求的一个组成部分;如果部件失败,则整个请求失败。因此,无法初始化的过滤器被认为无法提供服务,因此通常会通过它的任何请求都将失败。
如果过滤器对于你的情况是可选的,那么我会建议一个逻辑(几乎伪代码):
private boolean canServe = false;
public void init(FilterConfig fc) {
if( filter activation condition ) {
canServe = true;
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
if( canServe ) {
// filter logic - filter is ON
}
else chain.doFilter(request, response); // filter is OFF
}
或者,如果可以在编译时配置过滤器可用性(例如,基于环境 - DEV,STAGING,PRODUCTION),则可以使用将从web.xml中删除过滤器定义的条件构建(例如Ant)。