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 ...
随机推荐
- HYSBZ 1086 王室联邦 (树的分块)
题意:国王想把他的国家划分成若干个省.他的国家有n个城市,是一棵树,即n-1条边,编号为1..n.为了防止管理太过分散,每个省至少要有B个城市,为了能有效的管理,每个省最多只有3B个城市.每个省必须有 ...
- 作为一个iOS Developer 为什么我不用Swift?
1.开始 在去年这个时候接手了一个iOS项目,项目主用Swift语言进行开发,对于部分第三方Objective C开源库则使用bridge的方式进行调用 当时项目的规模大概是不超过15个页面,功能也比 ...
- elasticsearch时间格式DateFormat的含义
时间格式 枚举(或者英文)format pattern 含义 custom - 自定义属性 none - 不转化 basic_date yyyyMMdd 基本时间 basic_date_time ...
- Linux-RedHat7.2 使用CentOS源
-- 查看yum rpm -qa |grep yum --卸载yum rpm -qa | grep yum | xargs rpm -e --nodeps --拷贝centos系统yum工具安装程序到 ...
- python之道02
猜数字,设定一个理想数字比如:66,让用户输入数字,如果比66大,则显示猜测的结果大了,然后继续让用户输入; 如果比66小,则显示猜测的结果小了,然后继续让用户输入;只有等于66,显示猜测结果正确,然 ...
- PHP04 HTTP协议入门(转)
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
- 使用jave2将音频wav转换成mp3格式
最近需要用到语音合成功能,网上查阅了一番,发现可以使用腾讯云的语音合成API来完成这个功能,但是腾讯云的api返回的是wav格式的音频文件,这个格式的文件有些不通用,因此需要转换成mp3格式的文件. ...
- 深入Linux内核架构——进程管理和调度(下)
五.调度器的实现 调度器的任务是在程序之间共享CPU时间,创造并行执行的错觉.该任务可分为调度策略和上下文切换两个不同部分. 1.概观 暂时不考虑实时进程,只考虑CFS调度器.经典的调度器对系统中的进 ...
- CentOS 7的docker安装初始化
1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2: 添加软件源信息 添加阿里源这样下载 ...
- Django-Ajax组件
Ajax Ajax简介 AJAX(Asynchronous Javascript And XML),翻译成中文为"异步Javascript和XML".即使用Javascript语言 ...