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 ...
随机推荐
- python中删除list元素的方法del()、pop()和remove()
del():根据下标进行删除 In [1]: a = [1, 2, 3, 4, 5] In [2]: del a[0] In [3]: a Out[4]: [2, 3, 4, 5] pop(): 删除 ...
- 关于Android布局优化的代码使用
1. include标签: include标签的作用是在一个布局文件中导入另一个布局文件.在开发中经常会有多个页面同时拥有一部分相同的布局,这个时候如果每个布局都把那个部分的代码写一遍就会使得代码重 ...
- apache tomcat的安装
第一步:下载及安装. 1.首先进入apache的官网网址:www.apache.org 2.点击 projects 3.进入tomcat下载页面. 4.点击tomcat 9 5.认准是Binary D ...
- Sessions Hang on row cache lock
Sessions Hang on "row cache lock" (dc_objects) While Creating & Dropping a Table Concu ...
- js手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法
if(window.navigator.userAgent.indexOf('Android') > -1 || window.navigator.userAgent.indexOf('Adr' ...
- thinkphp ckeditor与ckfinder
thinkphp ckeditor与ckfinder 下载 ckeditor下载地址 ckfinder下载地址 整合 将ckeditor与findeditor下载完成后,放到public目录下,配置c ...
- Python从入坑到放弃!
Python基础 python基础 python基础之 while 逻辑运算符 格式化输出等 python基础之 基本数据类型,str方法和for循环 python基础之 列表,元组,字典 pyth ...
- 【Idea】-NO.162.Idea.1 -【Idea Unable to import maven project: See logs for details】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- [LintCode] 77. Longest common subsequences_ Medium tag: Dynamic Programming
Given two strings, find the longest common subsequence (LCS). Example Example 1: Input: "ABCD&q ...
- 20175211 2017-2018-2 《Java程序设计》第六周学习记录
目录 7.1 内部类 7.2 匿名类 7.3 异常类 断言 参考资料 <Java 2实用教程>第七章 内部类和异常类 7.1 内部类 内部类的外嵌类的成员变量在内部类中依然有效,内部类中的 ...