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>

  • 相关阅读:
    Direct2D 画刷篇
    突破Windows的极限
    String--cannot convert from 'const char *' to 'LPTSTR'错误
    win32
    Direct2D 另一种与D3D创建类似的方法
    Direct2D CreateHwndRenderTarget 和 CreateDCRenderTarget
    win32
    win32
    Linux下的包管理命令|aptitude命令基本使用
    解决ERROR: No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android
  • 原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/11309194.html
Copyright © 2011-2022 走看看