java-过滤器(Filter)
博客已迁移到CSDN《https://blog.csdn.net/qq_33375499》
在javaweb开发中,项目中都会包含一些过滤器(Filter),主要用于web服务器对资源的管理控制,如静态资源文件、jsp页面访问等。我们可以使用过滤器实现一些特殊的功能,如常见的过滤敏感词汇(替换为**)、url访问权限、登录验证,本文以登录验证为例,后面会为小伙伴们贴上代码。
开发Filter主要分为两个步骤:
- 在web.xml中配置过滤器。
<!-- 登录验证过滤器 -->
<filter>
<filter-name>loginFilter</filter-name><!--定义过滤器名称-->
<filter-class>com.lzq.myproject.filter.LoginFilter</filter-class><!--指定过滤器:web可通过反射进行创建并初始化-->
<init-param><!--指定初始化参数:可以存在多个-->
<param-name>param1</param-name><!--定义初始化参数名称-->
<param-value>我是初始化参数</param-value><!--定义初始化参数值-->
</init-param>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern><!--过滤所有url-->
</filter-mapping> - 通过实现Filter接口创建过滤器。
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException; public class LoginFilter implements Filter {
private FilterConfig filterConfig; @Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化
this.filterConfig = filterConfig;
} @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
// 获取初始化参数 param1 的值
String param1 = this.filterConfig.getInitParameter("param1");
// 打印初始化参数值
System.out.println(param1); String path = request.getRequestURI();
if(path.indexOf("/index/indexAction.do") > -1){// 登录页面不过滤
filterChain.doFilter(request, response);// 递交给下一个过滤器
}
if(path.indexOf("/index/indexAction!login.do") > -1){// 登录页面登录请求不过滤
filterChain.doFilter(request, response);// 递交给下一个过滤器
}
if(path.indexOf("/register.jsp")>-1){// 注册页面不过滤
filterChain.doFilter(request, response);// 递交给下一个过滤器
}
Integer uid = (Integer)session.getAttribute("userid");
if(uid != null){//已经登录
filterChain.doFilter(request, response);//放行,递交给下一个过滤器
}else if(path.indexOf("myproject") > -1){
// 未登录,进入登录页面
response.sendRedirect("index/login.jsp");
}
} @Override
public void destroy() {
// web服务器停止时,自动调用该方法进行销毁
}
}
过滤器(Filter)会在请求到达Servlet之前,拦截用户的请求,当用户请求资源满足我们自定义条件后,进行放行。
过滤器生命周期:
1、Filter的创建和销毁由WEB服务器负责。在WEB服务器启动时,通过web.xml读取,创建Filter实例对象,并调用其实现Filter接口方法init(FilterConfig filterConfig)进行初始化,如果在web.xml中的<filter></filter>下存在
<filter-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</filter-param>
标签,将把过滤器指定的初始化参数传入init方法的FilterConfig对象中。Filter对象只会创建一次,从而init方法也只会执行一次。
FilterConfig接口:
String getFilterName();//得到filter的名称。
String getInitParameter(String name);//返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
Enumeration getInitParameterNames();//返回过滤器的所有初始化参数的名字的枚举集合。
ServletContext getServletContext();//返回Servlet上下文对象的引用。
2、当用户请求访问与过滤器关联的url时,将执行doFilter(ServletRequest request,ServletResponse response, FilterChain chain)方法。该方法的形参FilterChain将请求交给下一个过滤器。
3、当WEB服务器停止时,过滤器将自动被销毁,调用过滤器对应的destroy方法。方法destroy也只会执行一次。
Filter链:在web项目中,我们将web.xml中配置的多个过滤器组合称为一个Filter链,过滤器的调用顺序为web.xml中配置注册的顺序,通过doFilter方法的FilterChain对象可移交到下一个过滤器。
java-过滤器(Filter)的更多相关文章
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...
- java过滤器Filter笔记
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...
- java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt.紧接着执行chain.doFilter()之后的代码 ...
- XSS过滤JAVA过滤器filter 防止常见SQL注入
Java项目中XSS过滤器的使用方法. 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩 ...
- java过滤器filter使用
一:filter:过滤器,拦截servlet的请求和响应. 1. package jd.com.filter; import javax.servlet.*; import java.io.IOExc ...
- 防止常见XSS 过滤 SQL注入 JAVA过滤器filter
XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往W ...
- java 过滤器filter使用案例
主要需要 过滤器类 和配置文件 1.过滤器类 SessionFilter package com.service; import javax.servlet.*; import javax.serv ...
- Java过滤器—Filter用法简介
一.什么是Filter? Filter译为过滤器. 由于年,Sun公司在Servlet2.3规范中添加了Filter功能,并在Servlet2.4中对Filter进行了细节上的补充. 二.运行原理: ...
- Java 过滤器Filter,Java Filter 不拦截某些请求 Java 过滤器支持Ajax请求
================================ ©Copyright 蕃薯耀 2020-01-10 https://www.cnblogs.com/fanshuyao/ 一.Java ...
- Java过滤器Filter使用详解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6374212.html 在我的项目中有具体应用:https://github.com/ygj0930/Coupl ...
随机推荐
- jmeter的JVM参数设置
JMeter用户可根据运行的计算机配置,来适当调整JMeter.bat中的JVM调优设置,如下所示: set HEAP=-Xms512m -Xmx512m set NEW=-XX:NewSize=12 ...
- DHCP server工作原理
1.CLIENT首先发出广播的DHCPDISCOVER报文,广播的目的是让DHCP SERVER能够收到这个请求报文.在这个报文中,CLIENT可以在"选项"字段中加入" ...
- 【转载】SQL Server 2012 日志传送
SQL Server 2012 日志传送 一.准备: 数据库为完全恢复模式,并事先做一次完全备份. 共享一个文件夹,主机备份放在这个文件夹,而且客户机有权访问这个共享文件夹. 二.基本配置 1.启动配 ...
- CFBundleURLTypes URL scheme
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Ar ...
- JOIN和UNION的区别
join 是两张表根据条件相同的部分合并生成一个记录集. SELECT Websites.id, Websites.name, access_log.count, access_log.dateFRO ...
- C ++ _多线程笔记
#include<iostream>#include <thread>//创建线程需要添加的头文件 using namespace std;/*thread join(阻塞:主 ...
- day02五大运算符:逻辑运算符、成员运算符、算数、比较、赋值、
# -*- encoding: utf-8 -*-# print('hello 中国')# 变量# print(10 + 20 + 3 + 15)# print((10 + 20 + 3 + 15)* ...
- 11scrapy
一. Scrapy基础概念 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取.Scrapy 使用了 Twisted异步网络框架,可以加快我 ...
- luogu P1238 走迷宫--DFS模板好(水)题
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- linux配置网桥
实现环境: centos7 Linux devstack01 3.10.0-693.el7.x86_64 1.创建br配置文件,ifcfg-br2 cp ifcfg-br0 ifcfg-br2 2 ...