Filter(拦截器)

128 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

Filter

概念: Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。

过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。

过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等

Filter快速入门

image.png

image.png

Filter执行流程

  1. 放行后访问对应资源,资源访问完成后,还会回到Filter中吗?会
  2. 如果回到Filter中,是重头执行还是执行放行后的逻辑呢?放行后逻辑

执行放行前逻辑

放行

访问资源

执行放行后逻辑

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    //1.放行前,对request数据进行处理
    System.out.println("filter 被执行了");
    //放行
    filterChain.doFilter(servletRequest,servletResponse);
    //2.放行后,对response数据进行处理
}

Filter使用细节

Filter拦截路径配置

image.png

过滤器链

一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链

案例

需求:访问服务器资源时,需要先进行登录验证,如果没有登录,则自动跳转到登录页面 逻辑分析:

1.判断用户是否登录: session中是否有user对象 登录:直接放行 未登录:跳转到登录页面,并给出提示信息

在此之前,还得

判断访问的是否是登录相关资源

是:放行

不是:进行登录验证

//登录验证的过滤器
@WebFilter("/*")
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        //判断访问资源路径是否和登录注册相关
        String[] urls = {"/login.jsp", "/imgs/", "/css/", "/loginServlet", "/register.jsp", "/registerServlet", "/checkCodeServlet"};
        //获取当前访问的资源路径
        String url = req.getRequestURL().toString();
        //循环判断
        for (String u : urls) {
            if (url.contains(u)) {
                //找到了
                //放行
                filterChain.doFilter(servletRequest, servletResponse);
                return;
            }
        }
        //1.判断对应的session中是否有user
        HttpSession session = req.getSession();
        Object user = session.getAttribute("user");
        //2.判断user是否为null
        if (user != null) {
            //登录过了
            //放行
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            //没有登录
            req.setAttribute("login_msg", "您尚未登录");
            req.getRequestDispatcher("/login.jsp").forward(req, servletResponse);

        }

Listener

概念:Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。

监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件

Listener分类: JavaWeb中提供了8个监听器

image.png

image.png

Maven

Maven是专门用于管理和构建Java项目的工具,它的主要功能有

提供了一套标准化的项目结构

image.png 提供了一套标准化的构建流程(编译,测试,打包,发布.....)

image.png 提供了一套依赖管理机制

依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件...)

以前:十分繁琐,麻烦

1.下载jar包

2.复制jar包到项目

3.将jar包加入工作环境

现在使用maven:

1.Maven使用标准的坐标配置来管理各种依赖

2.只需要简单的配置就可以完成依赖管理

maven简介

Apache Maven是一个项目管理和构建工具,它基于项目对象模型POv)的概念,通过一小段描述信息来管理项目的构建、报告和文档

官网: maven.apache.org/

image.png

仓库

本地仓库:自己计算机上的一个目录

中央仓库:由Maven团队维护的全球唯一的仓库

地址: repo1.maven.org/maven2

远程仓库(私服):一般由公司团队搭建的私有仓库

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包

如果有,则在项目直接引用;

如果没有,则去中央仓库中下载对应的jar包到本地仓库。

还可以搭建远程仓库

将来jar包的查找顺序则变为:本地仓库→远程仓库→中央仓库

maven安装配置

Maven安装配置

1.解压apache-maven-3.6.1.rar既安装完成

2.配置环境变量MAVEN_ HOME为安装路径的bin目录

3.配置本地仓库: 修改conf/settings.xml中的 为-个指定目录

4.配置阿里云私服:修改conf/settings.xml中的标签,为其添加如下子标签:

image.png

image.png

Maven基本使用

Maven常用命令

compile :编译

clean:清理

test:测试

package: 打包

install:安装(很关键,在爆红时点一下准没错)

Maven生命周期

Maven构建项目生命周期描述的是一次构建过程经历经历了多少个事件Maven对项目构建的生命周期划分为3套 clean:清理工作

default:核心工作,例如编译,测试,打包,安装等

site: 产生报告,发布站点等 同一生命周期内,执行后边的命令,前边的所有命令会自动执行

maven坐标中的字母含义

Maven 坐标主要组成

groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: com.itheima)

artifactld:定义当前Maven项目名称(通常是模块名称,例如order-service、goods-service)

version:定义当前项目版本号

依赖管理

image.png