如何使用并且使用过滤器
创建过滤器
1.创建过滤器类,并且实现过滤器接口(Filter)
2.使用@WebFilter(filterName = “loginCheckFilter”,urlPatterns = “/*”),filterName:过滤器名字,urlPatterns :被拦截的路径
3.实现 Filter 的默认方法doFilter
使用过滤器
在项目启动类中添加注解:@ServletComponentScan
最终代码区:
package com.yiwen.reggie.filter;import com.alibaba.fastjson.JSON;
import com.yiwen.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 拦截器的使用,拦截所有路径的请求,都需要经过此拦截器*/
@Slf4j
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*")
public class LoginCheckFilter implements Filter {//路径匹配器public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest;HttpServletResponse response = (HttpServletResponse)servletResponse;//获取请求路径String requestURI = request.getRequestURI();log.info("初始拦截请求:{}",request.getRequestURI());//创建需要放行的路径String[] urls = new String[]{"/employee/login","/employee","/employee/out","/employee/page","/backend/**","/front/**"};//判断本次是否需要拦截,里面使用Spring的路径对比器boolean check = check(requestURI, urls);if (check){//放行filterChain.doFilter(request,response);log.info("不需要拦截:{}",requestURI);return;}//如果已经登录则放行if (request.getSession().getAttribute("employee") != null) {//放行filterChain.doFilter(request,response);log.info("用户:{},已登录。",request.getSession().getAttribute("employee"));return;}//如果未登录则返回登录结果,通过输出流向客户端返回数据response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));log.info("未登录拦截路径:{}",request.getRequestURI());return;}/*** 使用Spring的路径匹配器来对比路径是否正确* @param requestUrI* @param urls* @return*/public boolean check(String requestUrI,String[] urls){for (String url : urls) {if (PATH_MATCHER.match(url,requestUrI)) {return true;}}return false;}}
如何使用并且使用过滤器相关推荐
- Redis 预防缓存穿透“神器” — 布隆过滤器
1. 布隆过滤器 1.1 概念 在架构设计时有一种最常见的设计被称为布隆过滤器,它可以有效减少缓存穿透的情况.其主旨是采用一个很长的二进制数组,通过一系列的 Hash 函数来确定该数据是否存在. 布隆 ...
- SpringBoot2.3 修改响应头、添加更新token、解决在过滤器中修改失败
前言 使用Spring Boot开发项目的过程中,难免会遇到向响应头中写入一些信息,例如更新了的token,用户详情等信息.在请求头中添加,请求时就可以通过过滤器,拦截器等验证或者获得请求头传递的信息 ...
- [JAVA EE] Filter过滤器
Filter过滤器 ◼ 过滤器(Filter)可以动态地拦截请求和响应. ◼ 应用场景:过滤敏感词汇.防止SQL注入.设置字符编码.进行URL级 别的权限访问控制.压缩响应信息等. 启动文件DemoA ...
- java 过滤器Filter
Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...
- java 编码过滤器_Java编码过滤器
Java编码过滤器: package com.utils; import javax.servlet.*; import javax.servlet.http.*; public class Enco ...
- android service intent-filter,如何在permission中加入intent-filter过滤器获取NotificationListenerService权限...
现在要让我的app获取NotificationListenerService权限,我勾选了BIND_NOTIFICATION_LISTENER_SERVICE权限后,用native.js跳到ACTIO ...
- authc过滤器 shiro_shrio 权限管理filterChainDefinitions过滤器配置
/** * Shiro-1.2.2内置的FilterChain * @see ============================================================= ...
- Filter(过滤器)
一.Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作. 1.Filter快速入门 1.1.步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方 ...
- 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen
算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...
- C++拾取——Linux下实测布隆过滤器(Bloom filter)和unordered_multiset查询效率
布隆过滤器是一种判定元素是否存在于集合中的方法.其基本原理是使用哈希方法将数据映射到一个很长的向量上.在维基百科上,它被称为"空间效率和查询时间都远远超过一般的算法"的方法.由于它 ...
最新文章
- 【mathematical statistics】4 hypothesis testing
- 从零写一个编译器(十二):代码生成之生成逻辑
- 第四章 C++数据类型
- Thymeleaf的学习
- Mysql DDL与DML
- 【React Native 安卓开发】----(View实战之仿携程)【第三篇】
- 别学英语了!微软给PPT和Skype新加的这个功能,让你和老外从此交流无障碍
- 龙腾世纪:起源–最后的古代墓碑和剑圣盔甲
- Win7下安装Ubuntu16.04成双系统
- db2 ? 22018
- CSDN上一个非常搞笑的帖子内容---一个让我瞠目结舌的电脑高手
- linux ps -ef命令输出详解,Linux-ps命令学习
- 解压上传zip文件并获取excel表数据
- 如何查看大型工程源代码(非常不错)
- 中国十大军工集团介绍
- python环境-基于go-cqhttp-简易qq聊天机器人
- python调用canape_利用CANape进行基于CCP的汽车控制器的匹配标定的设计
- 交互式电子技术手册系统软件怎么做装备维修
- 生成条形码 code39 和 code 128
- 高校竞赛信息管理系统