Filter过滤器经典应用

【JavaWeb】过滤器 Filter Tomcat10 过滤器Filter的使用,接口API,生命周期,xml与注解配置Filter,过滤器链 阅读详情
一、使浏览器不缓存页面的过滤器

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 用于的使 Browser 不缓存页面的过滤器
 */
public class ForceNoCacheFilter implements Filter {

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
 {
  ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
  ((HttpServletResponse) response).setHeader("Pragma","no-cache");
  ((HttpServletResponse) response).setDateHeader ("Expires", -1);
  filterChain.doFilter(request, response);
 }

 public void destroy()
 {
 }

    public void init(FilterConfig filterConfig) throws ServletException
 {
 }
}

二、检测用户是否登陆的过滤器

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.io.IOException;

/**
 * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面<p>
 * 配置参数<p>
 * checkSessionKey 需检查的在 Session 中保存的关键字<br/>
 * redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath<br/>
 * notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath<br/>
 */
public class CheckLoginFilter
 implements Filter
{
    protected FilterConfig filterConfig = null;
    private String redirectURL = null;
    private List notCheckURLList = new ArrayList();
    private String sessionKey = null;

 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
 {
  HttpServletRequest request = (HttpServletRequest) servletRequest;
  HttpServletResponse response = (HttpServletResponse) servletResponse;

   HttpSession session = request.getSession();
  if(sessionKey == null)
  {
   filterChain.doFilter(request, response);
   return;
  }
  if((!checkRequestURIIntNotFilterList(request)) && session.getAttribute(sessionKey) == null)
  {
   response.sendRedirect(request.getContextPath() + redirectURL);
   return;
  }
  filterChain.doFilter(servletRequest, servletResponse);
 }

 public void destroy()
 {
  notCheckURLList.clear();
 }

 private boolean checkRequestURIIntNotFilterList(HttpServletRequest request)
 {
  String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo());
  return notCheckURLList.contains(uri);
 }

 public void init(FilterConfig filterConfig) throws ServletException
 {
  this.filterConfig = filterConfig;
  redirectURL = filterConfig.getInitParameter("redirectURL");
  sessionKey = filterConfig.getInitParameter("checkSessionKey");

  String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList");

  if(notCheckURLListStr != null)
  {
   StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");
   notCheckURLList.clear();
   while(st.hasMoreTokens())
   {
    notCheckURLList.add(st.nextToken());
   }
  }
 }
}

三、字符编码的过滤器

import javax.servlet.*;
import java.io.IOException;

/**
 * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题
 */
public class CharacterEncodingFilter
 implements Filter
{
 protected FilterConfig filterConfig = null;
 protected String encoding = "";

 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
 {
        if(encoding != null)
         servletRequest.setCharacterEncoding(encoding);
        filterChain.doFilter(servletRequest, servletResponse);
 }

 public void destroy()
 {
  filterConfig = null;
  encoding = null;
 }

    public void init(FilterConfig filterConfig) throws ServletException
 {
         this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");

 }
}

四、资源保护过滤器

package catalog.view.util;

import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
//
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* This Filter class handle the security of the application.
*


* It should be configured inside the web.xml.
*
* @author
Derek Y. Shen
*/
public class SecurityFilter implements Filter {
//the login page uri
private static final String LOGIN_PAGE_URI = "login.jsf";

//the logger object
private Log logger = LogFactory.getLog(this.getClass());

//a set of restricted resources
private Set restrictedResources;

/**
* Initializes the Filter.
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.restrictedResources = new HashSet();
this.restrictedResources.add("/createProduct.jsf");
this.restrictedResources.add("/editProduct.jsf");
this.restrictedResources.add("/productList.jsf");
}

/**
* Standard doFilter object.
*/
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
this.logger.debug("doFilter");

String contextPath = ((HttpServletRequest)req).getContextPath();
String requestUri = ((HttpServletRequest)req).getRequestURI();

this.logger.debug("contextPath = " + contextPath);
this.logger.debug("requestUri = " + requestUri);

if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest)req)) {
this.logger.debug("authorization failed");
((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res);
}
else {
this.logger.debug("authorization succeeded");
chain.doFilter(req, res);
}
}

public void destroy() {}

private boolean contains(String value, String contextPath) {
Iterator ite = this.restrictedResources.iterator();

while (ite.hasNext()) {
String restrictedResource = (String)ite.next();

if ((contextPath + restrictedResource).equalsIgnoreCase(value)) {
return true;
}
}

return false;
}

private boolean authorize(HttpServletRequest req) {

//处理用户登录
/* UserBean user = (UserBean)req.getSession().getAttribute(BeanNames.USER_BEAN);

if (user != null && user.getLoggedIn()) {
//user logged in
return true;
}
else {
return false;
}*/
}
}

 
Filter(过滤器) 过滤器的基本概念Servlet 过滤器从字面可理解为经过一层层的过滤处理才达到使用的要求,而其实 Servlet 过滤器就是服务器与客户端请求与响应的中间层组件。在实际项目开发中 Servlet 过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。FilterFilter(过滤器)是 JavaWeb 三大组件之一(另外两个是 Servlet 和 Listener),是在 2000 年发布的 Servlet2.3 规范中加入的一个接口,是 Servlet 规范中非常实用的技术。 阅读详情

相关推荐

PLC编程入门基础知识

PLC即为可编程逻辑控制器,实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。

SANRENYIXING的博客 2万+

四个有用的过虑器

 一、使浏览器不缓存页面的过滤器 import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * 用于的使 Browser 不缓存页面的过滤器 */public class ForceNoCacheFilter implements Filter { publ

键者天行 6759

通达信强龙趋势幅图指标 - 精准捕捉趋势,把握强势行情,多角度分析个股,强弱一目了然

STICKLINE(趋势>0 AND SJTJ,4.8,5.8,1.5,0),COLORYELLOW;STICKLINE(资金>0 AND SJTJ,1.2,2.2,1.5,0),COLOR0080FF;STICKLINE(异动>0 AND SJTJ,0,1,1.5,0),COLORFF0080;STICKLINE(异动=0 AND SJTJ,0,1,1.5,1),COLORGRAY;

Q1809330692的博客 5643

【ThinkPHP6.x框架】(19)请求

请求对象 使用构造方法注入请求,如下: namespace app\controller; use think\Request; class Rely { protected $request; public function __construct(Request $request) { $this->request = $request; } public function index() { retur...

画家高的博客 1089

一文读懂无人机AI识别算法,原理、技术、应用

本文详细介绍了无人机识别算法的工作原理、技术优势以及在多个行业的应用前景,展现了其在提升安全监控、资源管理和应急响应中的关键作用。尽管无人机识别算法在多个领域展现出巨大潜力,但仍面临技术挑战,如算法的准确性、数据的实时处理能力以及对复杂环境的适应性。4. 消防与城市管理: 无人机识别算法在消防和城市管理中的应用,为相关部门提供了及时的信息支持,提升了应急处置能力和城市管理水平。1. 公安监控: 无人机识别算法在公安领域的应用,可以实时识别犯罪嫌疑人和违法行为,有效提升城市治安管理的智能化水平。

foiadrone的博客 1849

保姆级教程:在Ubuntu 20.04上从零跑通AT128雷达实时点云(附PandarView 2安装避坑指南)

本文提供了一份详细的Ubuntu 20.04系统下AT128雷达实时点云配置教程,涵盖环境准备、脚本修改、PandarView 2安装及常见问题排查。通过逐步指导,帮助开发者解决权限、网络配置等难题,确保顺利实现雷达数据的实时可视化。特别附有PandarView 2安装避坑指南,适合新手快速上手。

weixin_30813225的博客 299

六、 request cache的请求缓存

查找是否开启了request cache,是否有请求缓存,如果有缓存,直接取用缓存,返回结果 6.1 reqeust context请求上下文概念 首先,有一个概念,叫做reqeust context,请求上下文。一般来说,在一个web应用中reqeust context(请求上下文),在一个web应用中,Hystrix会在一个filter里面,对每一个请求都施加一个请求上下文,例如...

mtsbv110的专栏 2918

YOLOv11改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 5499

ThinkPHP6解决跨域问题 - 中间件设置

ThinkPHP6解决跨域问题 - 中间件设置

qq7027的博客 4818

使用 Python 爬虫抓取 IMDb 电影信息 - 评分、评论与基本信息抓取教程

本文介绍了如何使用 Python 爬虫技术抓取 IMDb 电影评分、评论和基本信息。我们分别展示了通过IMDb API和两种方法抓取数据,并进行了数据存储、分析与可视化。在未来,我们还可以基于这些数据开发电影推荐系统、情感分析工具等,进一步丰富电影数据的应用场景。通过这些实践,您不仅学会了如何抓取和存储数据,还可以通过这些基础来构建自己的数据分析应用,获取更丰富的电影数据。

2201_76125261的博客 601

PX4从放弃到精通(二十七):固定翼姿态控制

固件版本 PX4 1.13.2欢迎交流学习,可加左侧名片。

超维空间科技的博客 6892

TP6 中间件开启跨域 token

0x01 在 ./app/middleware.php 文件中启用内置中间件 \think\middleware\AllowCrossDomain::class <?php // 全局中间件定义文件 return [ // 全局请求缓存 // \think\middleware\CheckRequestCache::class, // 多语言加载 // \think\middleware\LoadLangPack::class, // Session初

除了能写一堆BUG你还能干什么? 1043

YOLOv11改进策略【独家融合改进】| 模型轻量化二次改进:StarNet + FreqFusion,极限降参,适用专栏内所有轻量化模型

FreqFusion是一种旨在解决密集图像预测任务中特征融合问题。

Limiiiing的博客 2125

过滤器Filter

一、Filter概述 Filter过滤器 Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改。 Filter提出了滤镜链(FilterChain)的概念,一个FilterChain包括多个Filter。 客户端请求request在抵达Servlet之前会经过FilterChain里的所有Filter, 服务器响应response在从Servlet抵达客户端浏览器之前 也会经过...

GoslingBoy的专栏 281

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java过滤器放行_[WEB篇]-JavaWeb基础与应用-07-过滤器

JavaWeb基础与应用7.过滤器过滤器的基础知识Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Servlet API中提供了...

weixin_36145011的博客 1307

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java web乱码_[WEB篇]-JavaWeb基础与应用-07-过滤器

JavaWeb基础与应用7.过滤器过滤器的基础知识Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。Servlet API中提供了...

weixin_39781550的博客 160

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

过滤器模式在Java中的实现与应用

过滤器模式是一种结构型设计模式,主要用于对数据集合进行条件筛选。其核心原理是通过定义统一的过滤接口,将不同的筛选条件封装成独立的对象,支持通过逻辑运算灵活组合多个条件。这种模式在数据处理领域具有重要价值,特别适合电商商品筛选、权限控制等需要动态组合查询条件的场景。Java中的Stream API与函数式编程为过滤器模式提供了更简洁的实现方式,结合并行处理可以显著提升大数据量下的筛选性能。在实际工程中,合理应用过滤器模式能够有效解耦业务逻辑与数据筛选逻辑,提高代码的可维护性和扩展性。

weixin_30444105的博客 454

过滤器模式

定义 过滤器模式(Intercepting Filter Pattern),又称标准模式(Criteria Pattern),主要用于统一接收并过滤客户端的请求,根据过滤器的选择,将请求传送给对应的目标处理程序。 过滤器模式属于对象结构型模式。 要点 主要角色: 目标对象(Target):处理请求,根据要求执行任务。 过滤器(Filter):过滤器在请求处理程序执行请求之前或之后,执行某些任务。...

xcosy 490

Filter过滤器

过滤器(Filter)用于根据预定义的条件对输入数据进行筛选,只保留满足条件的数据项。这个过程类似于在现实生活中使用筛子筛选谷物,去除杂质,留下纯净的部分。在计算机科学中,过滤器通常接收一个数据集作为输入,并返回一个新的数据集,其中包含原始数据集中符合特定标准的元素。是 JavaWeb三大组件(Servlet、Filter、Listener)之一。

2302_77758423的博客 2381

Filter 过滤器

(2) 使用 Filter 过滤器统一给所有的 Service。① Filter 过滤器它是 JavaWeb 的三大组件之一。http://ip:port/工程路径/target.jsp。③ 每个 ThreadLocal 对象实例定义的时候,一般。(停止 web 工程,也会销毁 Filter 过滤器)http://ip:port/工程路径/admin/*Filter 过滤器它只关心请求的地址是否匹配,第 1,2 步,在 web 工程启动的时候执行。第 4 步,停止 web 工程的时候,就会执行。

m0_72041293的博客 3275

Java 过滤器Filter详解

核心作用:过滤器是处理全局请求/响应逻辑的通用工具。关键接口init()doFilter()destroy()。常见场景:编码处理、日志记录、权限控制、跨域处理等。配置方式:XML 配置(兼容性强)或注解配置(简洁高效)。高级特性:过滤链、异步支持、动态注册。通过合理使用过滤器,可以有效解耦通用逻辑与业务代码,提升 Web 应用的可维护性和扩展性。

m0_65181864的博客 2296

【java】Filter过滤器

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 一、简介 Filter也称为过滤器,是Servlet中的一项技术,可以管理Web服务器管理的一系列资源,例如jsp,html等。Servlet API中提供了一个Filter接口,在开发web应用时若需要建立过滤器类,则需要实现这个Filter接口,然后实现其doFilter方法,...

至尊宝 2万+

JavaWeb过滤器(Filter)

开发工具与关键技术:javaWeb,过滤器(Filter) 撰写时间:2019-05-26 总结上述所有表达 第一点:过滤器是什么 第二点:客户端到服务端的流程 第三点:过滤器如何编写 第四点:Filter接口的生命周期及方法执行时期 第五点:三个方法中的重要参数了解及理解doFilter 第六点:web.xml的配置及四种拦截方式 第七点:目标资源与过滤器的执行顺序 第八点:多个...

小白学编程 7494

Filter PHP 过滤器\验证器

PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。 Filter 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。 PHP:指示支持该函数的最早的 PHP 版本 php5。 函数 描述 PHP filter_has_var() 检查是否存在指定输入类型的变量。 5 filter_id() 返回指定过滤器的 ID 号。 5 filter_input() 从脚本外部获取输入,并进行过滤。 5 filter_input_array() 从脚本外部获取多项

王兆镇的博客 1913

(Filter)过滤器的使用

过滤器(Filter)的简介 过滤器(Filter): 能够完成筛选不需要数据的工具(东西). 类似于生活中的净水器,香烟过滤嘴,滤纸, 收费站等.-------&gt;单向的. Web中: 过滤器其实就是服务端的一个程序(程序的最小单元就是类). 在Web开发中,过滤器其实就是一个Web组件(Servlet/Filter/Listener),其实就是一个特殊的类. 一个类实现javax....

weixin_41719737的博客 1万+
上一篇: Apache关闭目录浏览
下一篇: Mime-Type 列表
lhminjava
博客等级 码龄21年 15粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值