java过滤器不过滤某个货某一些路径 30

因业务需要,配置里有个过滤器是过滤所有目录的<filter-mapping><filter-name>AuthorFilter</filter-name><url-pat... 因业务需要,配置里有个过滤器是过滤所有目录的
<filter-mapping>
<filter-name>Author Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是现在我需要访问一个splist.jsp,不希望被拦截。怎么做到呢?前提是该过滤器类似封装的,不能更改这个过滤器的代码。
展开
 我来答
黑马程序员
2017-06-20 · 改变中国IT教育,我们正在行动
黑马程序员
黑马程序员为大学毕业后,有理想、有梦想,想从事IT行业的年轻人改变自己的命运。黑马程序员成就IT黑马
向TA提问
展开全部
  • 首先在web.xml 配置 参数  

<param-name>noLoginPaths</param-name>  参数名可自取

<filter>  
       <filter-name>LoginFilter</filter-name>  
       <filter-class>com.imooc.filter.LoginFilter</filter-class>  
       <init-param>  
           <param-name>noLoginPaths</param-name>  
           <param-value>login.jsp;fail.jsp;LoginServlet</param-value>  
       </init-param>  
       <init-param>  
           <param-name>charset</param-name>  
           <param-value>UTF-8</param-value>  
       </init-param>  
   </filter>  
   <filter-mapping>  
       <filter-name>LoginFilter</filter-name>  
       <url-pattern>/*</url-pattern>  
   </filter-mapping>
  • 然后在 Filter 中,创建一个 FilterConfig 的引用, 这个引用在init中初始化,并且能够通过它获取<init-param> 中的key和value  ,

String noLoginPaths = config.getInitParameter("noLoginPaths");  

  • 然后通过判断用户请求的url 是否符合 noLoginPaths 中设置的不过滤选项,如果如何,就调用do.filter放行

关键代码 :

if(noLoginPaths!=null){  
            String[] strArray = noLoginPaths.split(";");  
            for (int i = 0; i < strArray.length; i++) {  
                  
                if(strArray[i]==null || "".equals(strArray[i]))continue;  
                  
                if(request.getRequestURI().indexOf(strArray[i])!=-1 ){  
                    arg2.doFilter(arg0, arg1);  
                    return;  
                }  
            }  
              
        }

完整代码:

import java.io.IOException;  
  
import javax.servlet.Filter;  
import javax.servlet.FilterChain;  
import javax.servlet.FilterConfig;  
import javax.servlet.ServletException;  
import javax.servlet.ServletRequest;  
import javax.servlet.ServletResponse;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  
  
public class LoginFilter implements Filter {  
  
    private FilterConfig config;  
      
    @Override  
    public void destroy() {  
  
    }  
  
    @Override  
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {  
  
        HttpServletRequest request = (HttpServletRequest) arg0;  
        HttpServletResponse response = (HttpServletResponse) arg1;  
        HttpSession session = request.getSession();  
          
        String noLoginPaths = config.getInitParameter("noLoginPaths");  
          
        String charset = config.getInitParameter("charset");  
        if(charset==null){  
            charset = "UTF-8";  
        }  
        request.setCharacterEncoding(charset);  
          
        if(noLoginPaths!=null){  
            String[] strArray = noLoginPaths.split(";");  
            for (int i = 0; i < strArray.length; i++) {  
                  
                if(strArray[i]==null || "".equals(strArray[i]))continue;  
                  
                if(request.getRequestURI().indexOf(strArray[i])!=-1 ){  
                    arg2.doFilter(arg0, arg1);  
                    return;  
                }  
            }  
              
        }  
          
          
          
          
        if(session.getAttribute("username")!=null){  
            arg2.doFilter(arg0, arg1);  
        }else{  
            response.sendRedirect("login.jsp");  
        }  
          
    }  
  
    @Override  
    public void init(FilterConfig arg0) throws ServletException {  
        config = arg0;  
    }  
  
}
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
dai4067767
2015-07-14 · TA获得超过331个赞
知道小有建树答主
回答量:174
采纳率:100%
帮助的人:92.2万
展开全部
重新写个过滤器,该过滤器先排除splist.jsp,在调用原过滤器
追问
排除splist.jsp,然后调原来的过滤器,那如果访问splist.jsp的话,就是什么都做不了了啊
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-07-20
展开全部
再写一个过滤器的配置放此代码上面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式