Spring Boot配置原始Filter过滤器,简单易懂

介绍一下拦截器大致流程:

 前端请求-->放行前逻辑-->放行-->访问数据库资源-->放行后逻辑-->响应数据给前端

项目结构:

开始放代码:

1. 在pojo包下创建一个封装类Result.java(名字可以自由定义),用于响应给前端数据。

package com.itheima.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应信息 描述字符串
    private Object data; //返回的数据

    //测试方法
    public static Result strMessage(String msg) {
        return new Result(0, msg, null);
    }
}

2. 现在Controller层加入一个Test.java文件

package com.itheima.controller;
import com.itheima.filter.AbcFilter;
import com.itheima.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class Test {
    Integer num = 111;//测试功能的数据。

    @GetMapping ("/test")
    public Result Test(){
        log.info("查询到数据,num={}",num);
        return Result.strMessage("查询到数据");//返回给前端信息
    }
}

 3. 在filter包下创建AbcFilter.java

  • package com.itheima.filter;
    
    import lombok.extern.slf4j.Slf4j;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    
    @Slf4j
    @WebFilter("/test")//拦截路径为/test
    public class AbcFilter implements Filter {
    
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            log.info("进入过滤器!!!");
            filterChain.doFilter(servletRequest, servletResponse);//执行放行操作
            log.info("通过执行");
        }
    }

    4. 使用Postman测试工具发送请求(注意是Get请求,因为后端是@GetMapping)

  •  可以看见响应回来的结果是:

  • 控制台输出结果:

     5. 如果想要前端阻止访问后端数据,则修改doFilter()方法,加入判断语句,控制其流程,让其不执行filterChain.doFilter()。

  • package com.itheima.filter;
    
    import lombok.extern.slf4j.Slf4j;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    
    @Slf4j
    @WebFilter("/test")//拦截路径为/test
    public class AbcFilter implements Filter {
    
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            if (true) {
                log.info("进入过滤器!!!");
                return;//结束方法
            }
            filterChain.doFilter(servletRequest, servletResponse);//执行放行操作
            log.info("通过执行");
        }
    }

    返回的结果:

  •  

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值