zoukankan      html  css  js  c++  java
  • JavaWeb过滤器(Filter)

    参考:https://blog.csdn.net/yuzhiqiang_1993/article/details/81288912

    原理:

    一般实现流程:

    1、新建一个类,实现Filter接口
    2、实现doFilter()方法,打印一句话,来证明能够进行拦截
    3、在web.xml中进行配置(参照Servlet配置)
    4、访问一个页面,看看能不能拦截

    1、Filter实现类

    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 UserFilter implements Filter {
     
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
             
        }
         
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
        }
     
     
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            // 获取session对象,判断是否登录
            HttpServletRequest req=(HttpServletRequest)request;
            HttpServletResponse res=(HttpServletResponse)response;
            HttpSession session = req.getSession();
            if(session.getAttribute("user")==null){
                // 非法访问,没有登录,跳转到登录页面
                session.setAttribute("error","非法访问");
                // 保存客户想要去的地址, 登录成功后则直接跳转,而不是到首页
                // 获取请求的地址, 包括工程名,但是不包括参数
                System.out.println(req.getRequestURI());
                // 获取请求的参数
                System.out.println("参数:" + req.getQueryString());
                // 获取当前项目的绝对路径,方法已过时,不推荐使用 推荐使用  request.getServletContext().getRealPath("")
                System.out.println(req.getRealPath(""));
                // 获取请求的地址, 但是不包括工程名和参数
                System.out.println(req.getServletPath());
                // 此方法需要在servlet 3.0的版本上使用, 开发的环境需要J2EE6 运行需要Tomcate7.0
                //System.out.println("request.getServletContext().getRealPath:" +request.getServletContext().getRealPath(""));
                String goURL=req.getServletPath();
                if(req.getQueryString()!=null){
                    goURL += "?" + req.getQueryString();
                }
                System.out.println(goURL);
                session.setAttribute("goURL", goURL);
                res.sendRedirect(req.getContextPath() + "/login.jsp");
                System.out.println(req.getContextPath());
            }else{
                // 如果有下一个过滤器则跳转到下一个过滤器否则目标页面
                chain.doFilter(request, response);
            }
        }
    }
    session.setAttribute("error","非法访问")可以用对象取代,如:
    request.getSession().setAttribute("humanSession", human对象);

    2、web.xml配置

    <filter>
        <filter-name>userFilter</filter-name>
        <filter-class>
            cn.***.UserFilter
        </filter-class>
      </filter>
      <filter-mapping>
        <filter-name>userFilter</filter-name>
        <url-pattern>/user/*</url-pattern><br>    <dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 --> 
          <dispatcher>FORWARD</dispatcher> 
          <dispatcher>ERROR</dispatcher> 
          <dispatcher>INCLUDE</dispatcher>
      </filter-mapping>

  • 相关阅读:
    一套代码小程序&Web&Native运行的探索05——snabbdom
    一套代码小程序&Web&Native运行的探索04——数据更新
    一套代码小程序&Web&Native运行的探索03——处理模板及属性
    一套代码小程序&Web&Native运行的探索02
    微信小程序开发07-列表页面怎么做
    微信小程序开发06-一个业务页面的完成
    微信小程序开发05-日历组件的实现
    微信小程序开发04-打造自己的UI库
    微信小程序开发03-这是一个组件
    30分钟ES6从陌生到熟悉
  • 原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/11309194.html
Copyright © 2011-2022 走看看