javaWeb-Filter过滤器的应用

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 javaWeb-Filter过滤器的应用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Filter简介

Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

Filter应用案例

在本案例中,过滤器重要是为了防止用户在未登录的状态下直接访问主页。

需要用到的类:

  • LoginServlet(实现登录功能)
在这里插入代码片public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取用户输入的userName
        String username = req.getParameter("userName");

        if (username.equals("admin")){//如果登录成功
            //将登录信息存储至session中
            req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
            //重定向至主页
            resp.sendRedirect("/sys/homepage.jsp");
        }
        else {//如果登录失败
            //重定向至失败页面
            resp.sendRedirect("/default.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • LogoutServlet(实现注销功能)
public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //判断是否登录
        if(req.getSession().getAttribute("USER_SESSION") != null){
            //如果是登陆状态则抹除session中的USER_SESSION数据
            req.getSession().removeAttribute("USER_SESSION");
            //重定向回登陆界面
            resp.sendRedirect("/login.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • FilterDemo(实现过滤功能)
public class FilterDemo02 implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse) resp;
        //判断USER_SESSION值是否为空
        if (request.getSession().getAttribute("USER_SESSION") == null ){
            //如果检测到用户未登录直接进入主页则转至错误界面
            response.sendRedirect("/error.jsp");
        }

        //固定写法且必写
        filterChain.doFilter(req,resp);
    }

    public void destroy() {

    }
}

需要用到的JSP界面

  • login.jsp(登录界面)
  <body>
  <h1>登录</h1>
  <hr>
  <form action="/servlet/login" method="get">
    <input type="text" name="userName"><br>
    <input type="submit" value="登陆">
  </form>
  </body>
  • homepage.jsp(登录成功进入的主页)
<body>
<h1>欢迎来到主页!</h1><br>
<a href="/servlet/logout">注销</a>
</body>
  • default.jsp(登录失败界面)
<body>
<h1>Error:用户名错误或没有访问权限!</h1>
</body>
  • error.jsp(当用户直接访问主页时的错误界面)
<body>
<h1>请先登录再访问!</h1><br>
<a href="/login.jsp">点击此处返回登录界面</a>
</body>

web.xml配置

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.teng.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/servlet/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>LogoutServlet</servlet-name>
        <servlet-class>com.teng.servlet.LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LogoutServlet</servlet-name>
        <url-pattern>/servlet/logout</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>FilterDemo</filter-name>
        <filter-class>com.teng.filter.FilterDemo</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo</filter-name>
        <!--因为homepage.jsp放在sys文件下,所以过滤器需要过绿的是sys下的文件-->
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>

本案例中使用到的maven依赖

<!--        Servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!--        JSP依赖-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <!--        jspl依赖-->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!--        standard标签库-->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>

运行图

登录:
在这里插入图片描述
如果登陆成功:
在这里插入图片描述
如果登录失败:
在这里插入图片描述
如果用户未登录直接访问主页:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/147373.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!