zoukankan      html  css  js  c++  java
  • 过滤器

    过滤器: 定义在服务器端的一段程序, 可以截获客户端发来的请求, 并根据一定规则进行过滤和拦截

    过滤器的生命周期:
    服务器启动
    先通过web.xml加载过滤器进行实例化(这个过程是调用过滤器中init()方法, 同样也是只执行一次)
    客户端发送请求:
    执行过滤器中的doFilter()方法, 这个方法会执行N次, 每次有请求发送过来, 都会执行这个方法进行过滤
    销毁过程
    同servlet, 关闭或者停止服务器的时候会执行destory()方法

    过滤器链:
    不同的请求互不影响
    过滤器链主要是针对多个过滤器过滤同一个url请求
    过滤器的先后顺序是按照在web.xml的配置顺序来的
    运行顺序: 请求--->过滤器1过滤--->过滤器2过滤--->后台处理层--->过滤器2过滤--->过滤器1过滤--->客户端接收

    3.0新特性的过滤器:
    使用注解的方式:
    @WebFilter(filterName="", value={"",""}...等其他配置)

    login.jsp

    <from type="LoginServler" method="post">
            用户名:<input type="text" name="username" /><br>
            密码:   <input type="text" name="password" /><br>
            <input type="submit" value="登录" />
    </from> 

    register.jsp

    <from type="RegisterServler" method="post">
             用户名: <input type="text" name="username" /><br>
             密码:   <input type="text" name="password" /><br>
             姓名:    <input type="text" name="realname" /><br>
             <input type="submit" value="提交" />
    </from>

    LoginServler.java

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            System.out.println(username);
            System.out.println(password);
            
            if("admin".equals(username) && "123456".equals(password)){
                request.getSession().setAttribute("currentUser","admin");
                response.sendRedirect("index.jsp");
            }else{
                response.sendRedirect("fail.jsp");
            }
        }

    RegisterServler.java

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            System.out.println(username);
            System.out.println(password);
            
            if("admin".equals(username) && "123456".equals(password)){
                request.getSession().setAttribute("currentUser","admin");
                response.sendRedirect("index.jsp");
            }else{
                response.sendRedirect("fail.jsp");
            }
        }

    SessionFilterTest.java

    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;
    
    public class SessionFilterTest implements Filter {
    
        private String pages;
        private HttpServletRequest request;
        
        @Override
        public void destroy() {
            
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
                throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest)req;
            HttpServletResponse response = (HttpServletResponse)resp;
            
            //获取当前的请求
            String uri = request.getRequestURI();
            System.out.println("当前发送的请求"+uri);
            
            //获取不需要判断session的请求
            String[] _pages = pages.split(";");
            
            //判断当前请求是否在不需要判断的请求里
            if(checkString(_pages,uri)){
                //放行
                chain.doFilter(req,resp);
                
            }else{
                //先判断session在放行
                Object obj = request.getSession().getAttribute("currentUser");
                if(obj==null){
                    response.sendRedirect("login.jsp");
                }else{
                    chain.doFilter(req,resp);
                }
            }
        }
        public static boolean checkString(String[] pages,String uri){
            for(String s:pages){
                if(uri.contains(s)){
                    return true;
                }
            }
            return false;
        }
    
        @Override
        public void init(FilterConfig config) throws ServletException {
            String str = config.getInitParameter("page");
            this.setPages(str);
            System.out.println(str);
            
        }
        public String getPages(){
            return pages;
        }
        public void setPages(String pages){
            this.pages = pages;
        }
    
    }

    TestFilter.java

    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;
    
    public class TestFilter implements Filter {
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain arg2)
                throws IOException, ServletException {
            request.setCharacterEncoding("utf-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html; charset=utf-8");
            
            arg2.doFilter(request, response);
            
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
            
        }
    
    }
  • 相关阅读:
    监控注册表和文件夹改动
    Windows中根据GetLastError的错误代码,取得文字描述
    VBA 读取文件/写入文件
    (转)ansi,gb2312,gbk,gb18030,unicode,utf8,unicode big endian编码的区别及什么是BOM
    VBA 打开文件对话框
    修改GitHub记录中的invalidemailaddress
    使用DWM实现Aero Glass效果
    RAII(C++必知必会 条款40)
    C函数包装ASM代码时,指针无法传值的问题
    msysgit color.ui auto is invalid msysgit无法开启彩色显示
  • 原文地址:https://www.cnblogs.com/jgjk/p/7441687.html
Copyright © 2011-2022 走看看