1、验证过滤器进行权限验证的原理。
Filter过滤器:javaweb三大组件(Servlet,Filter,Listener)之一;过滤器可以把对资源的请求拦截下来,从而实现一些特殊功能;过滤器一般完成一些通用操作,比如登录校验等。
执行对应的业务功能之前先判断是否登录,如果登录则访问对应的业务功能,如果没有登录则返回错误信息。
定义Filter:定义一个类,实现Filter接口,并重写其所有方法。(包含初始化init方法和销毁destroy方法,只调用一次,doFilter方法,拦截请求之后调用,调用多次)
配置Filter:Filter类上加@WebFilter注解,配置拦截路径的资源,启动类上加@ServletComponebtScan开启Servlet组件支持。
package com.example.librarymasterlendlist.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class DemoFilter implements Filter {
@Override//初始化方法,只调用一次
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init 初始化方法执行了");
}
@Override//拦截到请求之后调用,调用多次
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("拦截到了请求……放行前逻辑");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("拦截到了请求……放行后逻辑");
}
@Override//销毁方法,只调用一次
public void destroy() {
System.out.println("destroy 销毁方法执行了");
}
}
拦截到了请求:
执行流程:放行前的逻辑 / 放行(访问对应的web资源)/ 放行后的逻辑(回到过滤器)
放行后访问对应资源,资源访问完成后,还会回到Filter中,执行放行后的逻辑。
postman测试:(拿到了响应结果)
控制台输出:
拦截路径:
拦截具体路径:/login 只访问/login路径时,才会被拦截。
目录拦截:/list/* 访问/list下的所有资源,都会被拦截。
拦截所有:/* 访问所有资源,都会被拦截。
过滤器链:一个web应用中,可以配置多个过滤器,形成过滤器链。filterChain.doFilter(servletRequest,servletResponse);表示放行到下一个过滤器,如果当前时最后一个过滤器则放行到web资源当中。(顺序:注解配置的Filter,优先级按照过滤器类名的自然排序)
2、将自己之前的项目,加上过滤器验证功能。
登录校验的基本流程:先访问登录接口login,登录成功后服务端生成一个jwt令牌并返回给前端,前端将jwt令牌记录下来,在后续的每一次请求中都会将jwt令牌携带到服务端。请求到达服务端后要想访问对应的服务功能,此时必须先校验令牌的有效性,在过滤器当中实现,无效则响应错误的信息,有效则放行访问对应的web资源,执行对应的业务操作。
首先测试/login:
测试/lend_list查询所有数据:
如果改变了令牌的值,则报错:
3、Apifox的使用
自动生成接口和接口文档: