Java过滤器Filter
过滤器
一、 简介
过滤器一般用于设置字符编码、登录验证、权限验证、敏感词过滤等,减少了代码的冗余,便于代码的复用,但是不一定是每个servlet都必须使用过滤器的。
二、 过滤器的工作流程

图片来源于:https://www.cnblogs.com/ygj0930/p/6374212.html
在浏览器发送请求到服务器过程中,进行过滤,过滤器在请求进入servlet、jsp、action、等资源文件前过滤、修改掉那些不满足过滤需求的请求或者是进行统一设置再进入资源文件;在服务器响应客户端前,进行设置;
浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。

图片来源于:https://www.cnblogs.com/ygj0930/p/6374212.html
可以配置多个过滤器,过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。doFilter()常常是对request请求的操作,doFilter()执行完以后的操作常常是对responsec响应的操作。
三、 配置
在web.xml中:
<filter>
<filter-name>filter</filter-name>//过滤器名称
<filter-class>com.zsl33.mvc.filter.Filter</filter-class>//过滤器路径
<init—param> //可选
<param—name>dd</param-name>//过滤器初始化参数名
<param-value>ddd</param-value>//过滤器初始化参数值
</init—param>
</filter>
<filter-mapping>//过滤器映射
<filter-name>filter</filter-name>//过滤器名称
<url-pattern>/emp/login.jsp</url-pattern>//指定过滤器作用的对象
</filter-mapping>
作用与所有web资源:<url—pattern>/*</url-pattern>
作用于某一文件夹下所有文件:<url—pattern>/dir/*</url-pattern>
作用于某一种类型的文件:<url—pattern>*.扩展名</url-pattern>
作用于某一文件夹下某一类型文件:<url—pattern>/dir/*.扩展名</url-pattern>
注解:
@WebFilter(urlPatterns={"/pages/*","/emp/delete"})
在过滤器类上加上注解,可配置多个需要验证的路径。
四、 实现
定义过滤器类进行过滤,需实现javax.servlet.Filter接口,
并配置需要过滤的路径
@WebFilter(urlPatterns= {"/pages/*","/emp/delete"})
public class Filter implements javax.servlet.Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("过滤器销毁");
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// 必要操作
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
//设置字符编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//登陆简单验证
if(request.getSession().getAttribute("name") == null && request.getSession().getAttribute("pwd") == null) {
request.setAttribute("login","请先登入");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else {
arg2.doFilter(request, response);
}
//不过滤样式以及js等一些静态资源
String spath = request.getServletPath();
Object loginUser = request.getSession().getAttribute("name");
String[] urls = {"/login","/json",".js",".css",".ico",".jpg",".png",".gif"};
boolean flag = true;
for (String str : urls) {
if (spath.indexOf(str) != -1) {
flag =false; break;
}
}
if (flag) {
if (loginUser != null) {
arg2.doFilter(request, response);
}else {
response.sendRedirect(request.getContextPath()+"/webpage/page/login/login.jsp");
}
}else{
arg2.doFilter(request, response);
}
}
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 ...
随机推荐
- k8s-No.1-概述与架构
本章目录 k8s概述 k8s系统架构 k8s工作流程图 一 概述 k8s是什么 k8s是谷歌公司基于内部容器管理系统borg开源出的一个容器集群管理工具,它是用go语言开发,提供了容器的应用部署,规 ...
- iconfont在线链接使用方法(转)
原文:https://blog.csdn.net/jinkingliao/article/details/51353937 基础流程就不多赘述,直接到http://www.iconfont.cn/官网 ...
- linux架构师之路!
目录 1.shell编程总结 2.python编程总结 3.网络基础总结 4.存储的基本知识 5.linux常用 架构学习目录 1.网站架构 2.架构师技术图谱 3.python之路 4.IBM技术主 ...
- trident-deploy自动部署命令
sh ./iot-api/install.sh ./iot-api/values.yaml
- 如何增加Ubuntu交换空间swap
如何增加Ubuntu交换空间swap 1 使用命令查看系统内swap分区大小 green@green:~$ free -m total used free shared buff/cache ava ...
- AMBER: CPPTRAJ Tutorial C0
CPPTRAJ作为PTRAJ的继任者,拥有比PTRAJ更强大的功能,本教程会简要的介绍CPPTRAJ的用法及注意事项. 需要的文件: trpzip2.gb.nc trpzip2.ff10.mbondi ...
- requests 可以玩接口自动化测试,爬虫也是可以滴
import requests #1.带参的get请求: url ='URL_你的' requests.get(url,params={"key":"value" ...
- linux----------fedora 27 如何启用输入法
1.安装完成以后是自带了输入法的,但是需要启用. 一定要放到第一个位置,然后注销或者重启.
- java快排思想
1分治思想 1.1比大小在分区 1.2从数组中取出一个数做基准数 1.3将比他小的数全放在他的左边,比他大的数全放在他的右边 1.4然后递归 左边 和右边 }
- puppeteer(六)启动参数——浏览器扩展应用的添加及应用
前言 最近再做浏览器的自动化,首页是定制化的,是通过extension(扩展)实现的,由于通过puppeteer默认是以无参(即首次以干净的环境)运行的,导致登录页无法正常显示,首先想当然是直接找扩展 ...