当前位置: 首页 > news >正文

《web应用技术》第十一次课后作业

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的使用

自动生成接口和接口文档:

相关文章:

  • git创建子模块
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • 格雷母线技术革新:推动斗轮堆取料机进入精准操作时代
  • 人工智能--自然语言处理NLP概述
  • GD32F4xx 移植agile_modbus软件包与电能表通信
  • 怎么把webp文件转换为jpg?快来试试这四种转换方法!
  • 简单剖析tRPC-Go中使用的第三方协程池ants
  • 精读文献|《CATENA》新文:全球植被绿化对生态系统水分利用效率的响应
  • Python sorted()方法
  • 极具吸引力的小程序 UI 风格
  • 1. ELK日志分析
  • delmia中机器人末端固定工具
  • spring01
  • 用android如何实现计算机计算功能
  • 【机器学习】 第1章 概述
  • 78. Subsets
  • Django 博客开发教程 8 - 博客文章详情页
  • IP路由与转发
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript函数式编程(一)
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Laravel Telescope:优雅的应用调试工具
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue-router的history模式发布配置
  • Vue实战(四)登录/注册页的实现
  • web标准化(下)
  • 蓝海存储开关机注意事项总结
  • 前端临床手札——文件上传
  • 微信小程序设置上一页数据
  • 学习ES6 变量的解构赋值
  • 湖北分布式智能数据采集方法有哪些?
  • 通过调用文摘列表API获取文摘
  • ​520就是要宠粉,你的心头书我买单
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • (06)Hive——正则表达式
  • (1)(1.9) MSP (version 4.2)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (实战篇)如何缓存数据
  • (四) Graphivz 颜色选择
  • (五)activiti-modeler 编辑器初步优化
  • (转)http协议
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ***测试-HTTP方法
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Core中的去虚
  • .net dataexcel winform控件 更新 日志
  • .NET Micro Framework初体验(二)
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET关于 跳过SSL中遇到的问题
  • @Async 异步注解使用