简单的过滤器实现

 

1:实现一个filter要实现Filter接口,并且要在web.xml文件中配置,配置时指定过滤所有action(*.do),当然要除了login.do

2:web.xml对应配置监听器,主要是监听接收到的请求,除了login.do路径不用过滤处理,其他的都要过滤处理,如下:

<filter>
        <filter-name>urlFilter</filter-name>
        <filter-class>cn.hs.filter.UrlFilter</filter-class>
         <init-param>
          <param-name>excepUrls</param-name>
          <param-value>/login.do</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>urlFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

类例子如下:
public class UrlFilter implements Filter {
    //配置参数excepUrls(即该参数指定哪些url不用过滤)
    private String excepUrls;
    //过滤器有个销毁方法destroy
    public void destroy() {
    }
    //过滤器主要过滤操作放在doFilter方法里面
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;   
        HttpSession session = request.getSession(true); 
        String servletPath = request.getServletPath();//过去request的getServletPath()方法获取请求完整url
        HttpServletResponse response = (HttpServletResponse) res;
        String path=servletPath.substring(servletPath.lastIndexOf("/"));//通过最后一个“/”来截取最后部分路径
        
        if(excepUrls.contains(path)||servletPath.contains("/API")){//判断是不是不用过滤的url
            chain.doFilter(req, res);//是就允许通过
        }else if(session.getAttribute("loginUser")==null){//判断session中是否有该用户,没有就跳回登录页面,有就通过
            String returnurl = request.getContextPath();
            response.sendRedirect(returnurl+"/login.html");
        }else{
            chain.doFilter(req, res);
        }
        return;
    }
    /*过滤器初始化方法init,主要通过配置文件获取不需要过滤的url并且进行初始化*/
    public void init(FilterConfig configfile) throws ServletException {
        excepUrls = configfile.getInitParameter("excepUrls");
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值