24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

Java中的过滤器应该如何使用?

2017-06-29 16:31:25 东方博宜 阅读

过滤器的作用:过滤访问请求(页面请求或者Servlet的请求)

图片.png



登陆流程:

Index.jsp

    <h1 align="center">用户登陆</h1>

   

    <!-- methodget表示以url带参数的形式,post表示以隐藏的方式带参数提交 -->

    <form action="LoginServlet" method="post">

       <p>

                       用户名:<input type="text" name="username"/> *

       </p>

      

       <p>

                       密码:<input type="password" name="pwd"/> *

       </p>

      

       <p>

           <input type="submit" value="提交"/>

           <input type="reset" value="重置"/>

       </p>

</form>

 


 

LoginServlet

/**

 * 处理登陆请求的Servlet

 *

 */

public class LoginServlet extends HttpServlet {

 

    protected void doGet(HttpServletRequest request,

            HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);

    }

 

    protected void doPost(HttpServletRequest request,

            HttpServletResponse response) throws ServletException, IOException {

        // 设置response编码集,防止forward跳转到的页面乱码

        response.setContentType("text/html;charset=utf-8");

 

        // 设置参数的编码集,防止获取到的参数乱码

        request.setCharacterEncoding("utf-8");

 

        // 获取参数

        String username = request.getParameter("username");

        String password = request.getParameter("pwd");

 

        // 判断登陆信息

        if (username != null && username.equals("admin") && password != null

                && password.equals("123")) {

            HttpSession session = request.getSession();

            session.setAttribute("username", username);

            request.getRequestDispatcher("main.jsp").forward(request, response);

        } else {

            response.sendRedirect("index.jsp?msg=fail");

        }

    }

}

 

Main.jsp

    欢迎<%=session.getAttribute("username") %>访问! <br>

 

 

添加过滤器的步骤:

第一步:定义过滤器,实现Filter接口,并实现所有的抽象方法!

/**

 * 检验用户是否登陆的过滤器

 */

public class LoginFilter implements Filter {

 

    public void destroy() {

        System.out.println("过滤器被销毁!");

    }

 

    /**

     * 处理过滤请求

     */

    public void doFilter(ServletRequest req, ServletResponse res,

            FilterChain chain) throws IOException, ServletException {

        System.out.println("过滤请求!");

 

        // 获取requestresponse

        HttpServletRequest request = (HttpServletRequest) req;

        HttpServletResponse response = (HttpServletResponse) res;

 

        // 获取用户将要访问的页面

        String page = request.getRequestURI();

        boolean f = isLoginPage(page);

        //如果是必须登陆才能访问的页面

        if(f == true){

            //判断用户是否登陆

            HttpSession session = request.getSession();

            //如果用户没有登陆

            if(session.getAttribute("username") == null){

                response.sendRedirect("index.jsp?msg=notlogin");

            }else{

                chain.doFilter(req, res);

            }

        }else{

            chain.doFilter(req, res);

        }

    }

 

    // 自己添加的方法,应该出现在JavaBean的类中,判断用户想要访问的页面是否是必须登陆才能访问的

    public boolean isLoginPage(String page) {

        boolean r = true;//假设页面是需要登陆的

        // 获取不需要登陆就可以访问的页面有哪些

        try {

            InputStream input = this.getClass().getClassLoader()

                    .getResourceAsStream("pages.properties");

            Properties pro = new Properties();

            pro.load(input);

           

            //,index.jsp,regiter.jsp,about.jsp,myindex.jsp,

            String loginPages = pro.getProperty("pages");

           

            //page=/myquery2/index.jsp

            if(page != null && loginPages != null){

                //获取从最后一个/到结束的值(比如:index.jsp

                page = page.substring(page.lastIndexOf("/") + 1);

               

                //判断page是否是loginPages的一部分(或者没有page,也就是首页)

                if(loginPages.contains("," + page + ",") || page.equals("")){

                    r = false;

                }

            }

           

        } catch (Exception e) {

            e.printStackTrace();

        }

        return r;

    }

 

    public void init(FilterConfig arg0) throws ServletException {

        System.out.println("过滤器初始化!");

    }

 

}

 

第二步:在web.xml中注册过滤器

  <!-- 配置过滤器 -->

  <!-- 声明节点 -->

  <filter>

     <filter-name>LoginFilter</filter-name>

     <filter-class>com.user.filter.LoginFilter</filter-class>

  </filter>

 

  <!-- 映射节点 -->

  <filter-mapping>

     <filter-name>LoginFilter</filter-name>

     <!-- 过滤范围 -->

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

  </filter-mapping>

 

src目录下添加pages.properties

pages=,index.jsp,regiter.jsp,about.jsp,

 

注意:登陆的过滤器的过滤逻辑

A、获取用户将要访问什么页面

B、判断要访问的页面是否是必须登陆才能访问的页面

C、如果是,则判断用户是否登陆,没有登陆,则跳转到登陆页面,登陆了,则放行

   如果不是,则直接放行!


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn