0
点赞
收藏
分享

微信扫一扫

过滤器和web会话跟踪机制

伢赞 2022-03-31 阅读 59
后端

过滤器

作用:对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)

Servlet API 中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。

Servlet API 中,与过滤器有关的API共有三个接口,分别是

        ● Filter

        ● FilterChain

        ● FilterConfig

Filter接口是过滤器类必须实现的接口,该接口中有三个方法。

init(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。参数FilterConfig可以获得filter的初始化参数。FilterConfig 是 Servlet API 提供的一个用于获取 Filter 程序在 web.xml 文件中的配置信息的接口 。

doFilter(ServletRequest request, ServletResponse response, FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。

destroy():该方法在容器销毁过滤器对象前被调用。

package webback.filter;

import javax.servlet.*;
import java.io.IOException;
    /*
    * 编码过滤器
    * */
public class EncodingFilter  implements Filter {
    //过滤器生命周期开始于服务器的启动
    //过滤器需要执行的功能
    String charset;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("编码过滤器初始化");
        //FilterConfig 是 Servlet API 提供的一个用于获取 Filter 程序在 web.xml 文件中的配置信息的接口
        //getInitParameter(String name),该方法用来获得过滤器的初始化参数值。
        charset = filterConfig.getInitParameter("charset");
    }
    /*
    过滤器需要执行的功能
    * */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("编码过滤器");
        servletRequest.setCharacterEncoding(charset);
        // filterChain(过滤链)让请求离开过滤器,继续向下执行
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

web.xml中的配置

 <!--配置过滤器-->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>webback.filter.EncodingFilter</filter-class>
        <!--为过滤器配置参数-->
        <init-param>
            <param-name>charset</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <!--配置哪些请求可以进入到此过滤器-->
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern><!--表示所有请求都进入到过滤器-->
    </filter-mapping>

过滤器:过滤器用来实现通用的功能,减少代码冗余,提高可维护性

一个过滤器可以配置给多个资源使用

一个资源也可以配置多个过滤器,按照配置顺序调用

web会话跟踪机制

从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。

会话(Session)跟踪是web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与session。

Http是无状态协议

session 第一次连接到后端,在服务器端创建的一个对象,生产一个id,可以在服务器端存储用户信息

Cookie 使用来在前端浏览器中保存sessionid 默认是会话级别的(浏览器关闭消失)

​
/*
  * 登录成功后,需要在后端将用户信息保存在session中
 * */
HttpSession session = req.getSession();
System.out.println("dopost:"+session.getId());
session.setAttribute("user",user);//将用户信息存储到session中

​

session生命周期:session对象,创建于前端连接到后端服务器开始

销毁:1.服务器关闭

2.非活动时间到期(多久不用,会自动销毁)tomcat默认是30分钟

3.退出,主动销毁session invalidate()

System.out.println(session.getMaxInactiveInterval());//获得最大非活动时间
session.setMaxInactiveInterval(3600);//设置最大非活动时间
System.out.println(session.isNew());//是不是第一次创建

过滤器验证用户是否登录

建立IsLoginFilter过滤器

<!--后端验证用户是否登录-->
    <filter>
        <filter-name>isLogin</filter-name>
        <filter-class>webback.filter.IsLoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>isLogin</filter-name>
        <url-pattern>/back/*</url-pattern>//过滤url中属于/back/*的url
    </filter-mapping>

建立StudentServlet并在web.xml中配置学生管理servlet

 <!--配置学生管理servlet-->
    <servlet>
        <servlet-name>StudenServlet</servlet-name>
        <servlet-class>webback.servlet.StudentServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>StudenServlet</servlet-name>
        <url-pattern>/back/StudenServlet</url-pattern><!--定义url-->
    </servlet-mapping>//  <servlet-mapping>告诉别人怎么找到你的servlet

建立StudentServlet、logOutServlet

在web.xml中配置logOutServlet

 <!--退出-->
    <servlet>
        <servlet-name>logOutServlet</servlet-name>
        <servlet-class>webback.servlet.logOutServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>logOutServlet</servlet-name>
        <url-pattern>/back/logOutServlet</url-pattern><!--定义url-->
    </servlet-mapping>

过滤器顺序:编码过滤器-->跨域过滤器-->验证用户是否登录过滤器

举报

相关推荐

0 条评论