百木园-与人分享,
就是让自己快乐。

【JavaWeb-Servlet】笔记(5)--- Filter接口(过滤器接口);通过过滤器优化在线考试系统的安全性;最终版互联网通信原理图

Servlet 规范扩展 ---- Filter接口(过滤器接口):


1、介绍:

1)来自于 Servlet 规范下接口,在 Tomcat 中存在于 servlet-api.jar 包。

2)Filter 接口实现类由开发人员负责提供,Http 服务器不负责提供。

3)Filter 接口在 Http 服务器调用资源文件之前,对 Http 服务器进行拦截。

 

2、具体作用:

1)拦截 Http 服务器,帮助 Http 服务器检测当前请求合法性。

2)拦截 Http 服务器,对当前请求进行增强操作。

 

3、Filter 接口实现类开发步骤(三步):

1)创建一个 Java 类实现 Filter 接口。

2)重写 Filter 接口中 doFilter 方法。

3)web.xml 将过滤器接口实现类注册到 Http 服务器。

 

4、Filter 拦截地址格式:

1)命令格式(oneFilter 为 我们写的一个过滤器接口实现类):

<filter-mapping>
    <filter-name>oneFilter</filter-name>
    <url-pattern>拦截地址</url-pattern>
</filter-mapping>

 

 

2)命令作用:拦截地址通知 Tomcat 在调用 ?? 资源文件之前需要调用 OneFilter 过滤进行拦截。

 

3)要求 Tomcat 在调用某一个具体文件之前,来调用 OneFilter 拦截

<url-pattern>/img/mm.jpg</url-pattern>

 

4)要求 Tomcat 在调用某一个文件夹下所有的资源文件之前,来调用 OneFilter 拦截

<url-pattern>/img/*</url-pattern>

 

5)要求 Tomcat 在调用任意文件夹下某种类型文件之前,来调用 OneFilter 拦截

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

 

6)要求 Tomcat 在调用网站中任意文件时,来调用 OneFilter 拦截

<url-pattern>/*</url-pattern>

 

通过过滤器优化在线考试系统的安全性:


  • com.burnyouth.controller.LoginServlet(实现登录验证功能):
package com.burnyouth.controller;

import com.burnyouth.dao.UserDao;
import jakarta.servlet.*;
import jakarta.servlet.http.*;

import java.io.IOException;

public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String userName, password;
        UserDao dao = new UserDao();
        int result = 0;

        request.setCharacterEncoding(\"utf-8\");
        userName = request.getParameter(\"userName\");
        password = request.getParameter(\"password\");
        result = dao.login(userName,password);
        if (result == 1) {
            //在判断来访用户合法后,通过请求对象向 Tomcat 申请为当前用户申请一个 HttpSession
            HttpSession session = request.getSession();
            response.sendRedirect(\"/myWeb/index.html\");
        } else {
            response.sendRedirect(\"/myWeb/login_error.html\");
        }
    }
}

 

  • com.burnyouth.filter.OneFilter(实现拒绝非法用户请求内部文件资源的功能):
package com.burnyouth.filter;

import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;

public class OneFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //将 ServletRequest 强转为 HttpServletRequest,以调用getRequestDispatcher()
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpSession session = null;

        //调用请求对象读取请求协议包中的URI,了解用户要访问的资源文件是什么
        String uri = request.getRequestURI();

        //如果本次请求资源文件与登录有关(login.html或者/myWeb等),应该无条件放行
        if (uri.indexOf(\"login\") != -1 || \"/myWeb/\".equals(uri)) {
            filterChain.doFilter(servletRequest,servletResponse);
            return;
        }


        //如果本次请求访问的是其他资源文件,需要判断用户是否已经登录过了(判断HttpSession是否被创建)
        session = request.getSession(false);

        //判断来访用户是否合法
        if (session == null) {
            request.getRequestDispatcher(\"/login_error.html\").forward(servletRequest,servletResponse);
            return;
        }

        //放行
        filterChain.doFilter(servletRequest,servletResponse);

    }
}

 

xml(仅展示过滤器相关代码):

<filter>
    <filter-name>OneFliter</filter-name>
    <filter-class>com.burnyouth.filter.OneFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>OneFliter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

最终版互联网通信原理图:


【JavaWeb-Servlet】笔记(5)--- Filter接口(过滤器接口);通过过滤器优化在线考试系统的安全性;最终版互联网通信原理图

 


来源:https://www.cnblogs.com/Burning-youth/p/16016741.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 【JavaWeb-Servlet】笔记(5)--- Filter接口(过滤器接口);通过过滤器优化在线考试系统的安全性;最终版互联网通信原理图

相关推荐

  • 暂无文章