如何制定filter不去拦截某类的url?

如何制定filter不去拦截某类的url?,第1张

直接映射一个请求

<servlet-mapping>

<servlet-name>TestServlet</servlet-name>

<url-pattern>/TestServlet</url-pattern>

</servlet-mapping>

映射一个路径下的所有请求。

<servlet-mapping>

<servlet-name>EncodingFilter</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

需要注意的是,这种写法必须以/开头,写成与绝对路径的形式,即便是映射所有请求也要写成/*,不能简化成*。

映射结尾相同的一类请求。

<servlet-mapping>

<servlet-name>ControllerServlet</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

需要注意的是,这种请求映射就不能指定某一路径了,它必须是以星号(*)开始字母结尾,不能写成/*.do的形式。

在配置拦截器、过滤器时,记下不需要被拦截的路径,如:

<filter>

<filter-name>login</filter-name>

<filter-class>com.ahpu.oss.controller.LoginFilter</filter-class>

<init-param>

<param-name>ignorePath</param-name>

<param-value>/tologin.do,/login.do,/createImg.do</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>login</filter-name>

<url-pattern>*.do</url-pattern>

</filter-mapping>

<init-param>

<param-name>ignorePath</param-name>

<param-value>/tologin.do,/login.do,/createImg.do</param-value>

</init-param>

里的路径就是不想被过滤的

首先在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.jspfail.jspLoginServlet</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  

    }  

  

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11719708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存