案例

demo2,login.jsp请求提交到hello.jsp,该页面中有两个text,分别使用两个Filter链拦截,验证账号密码是否正确,把账号密码设置到Filter初始化参数中

login.jsp

<body>
<h3>登录</h3> <form action="hello.jsp" method="post">
username:<input type="text" name="username" /><font color="red">${requestScope.message }</font>
<br>
password:<input type="text" name="password" /><font color="red">${requestScope.message }</font>
<br>
<input type="submit" value="Submit" />
</form>
</body>

hello.jsp

<body>

    hello:${param.username }

</body>

PasswordFilter.java

package com.test.demo2UserFilter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class PasswordFilter implements Filter { //获取到FilterConfig对象,因为要获取web应用初始化参数,必须要ServletContext(),
//而ServletContext则需要FilterConfig对象
private FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//获取到初始化参数password的参数值
String initpassword = filterConfig.getServletContext().getInitParameter("password");
//获取到表单提交的参数值
String password = request.getParameter("password");
//判断账号是否正确
if(!initpassword.equals(password)){
request.setAttribute("message", "密码不正确!");
request.getRequestDispatcher("/demo2/login.jsp").forward(request, response);
return;
}
chain.doFilter(request, response);
} @Override
public void destroy() { } }

UsernameFilter.java

package com.test.demo2UserFilter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class UsernameFilter implements Filter { //获取初始化参数,使用init方法,为filterConfig赋值,因为init()方法可以获取到FilterConfig对象,
//而FilterConfig对象可以获取到初始化参数。
private FilterConfig filterConfig; @Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//获取到初始化参数username的参数值
String initUser = filterConfig.getInitParameter("username");
//获取到表单提交的参数值
String user = request.getParameter("username");
//判断账号是否正确
if(!initUser.equals(user)){
request.setAttribute("message", "用户名不正确!");
request.getRequestDispatcher("/demo2/login.jsp").forward(request, response);
return;
}
chain.doFilter(request, response);
} @Override
public void destroy() {
} }

web.xml

  <context-param>
<param-name>password</param-name>
<param-value>1230</param-value>
</context-param>
<filter>
<filter-name>usernameFilter</filter-name>
<filter-class>com.test.demo2UserFilter.UsernameFilter</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>Tom</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>usernameFilter</filter-name>
<url-pattern>/demo2/hello.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>passwordFilter</filter-name>
<filter-class>com.test.demo2UserFilter.PasswordFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>passwordFilter</filter-name>
<url-pattern>/demo2/hello.jsp</url-pattern>
</filter-mapping>

案例

demo3,禁用浏览器缓存过滤器

cache_a.html

<body>

    <a href="cache_b.html">To B Page</a>

</body>

cache_b.html

<body>

    <a href="cache_a.html">To A Page</a>

    <img alt="" src="02.jpg">
</body>

cacheFilter.java

package com.test.demo3cacheFilter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.test.demo1Filter.HttpFilter;
/**
* 使用过滤器实现禁用浏览器缓存
*/
public class CacheFilter extends HttpFilter { @Override
public void doFilter(HttpServletRequest req, HttpServletResponse resp,
FilterChain chain) throws IOException, ServletException {
System.out.println("cache...");
resp.setDateHeader("Expires", -1);
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Pragme", "no-cache"); chain.doFilter(req, resp);
} }

web.xml

  <filter>
<filter-name>cacheFilter</filter-name>
<filter-class>com.test.demo3cacheFilter.CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cacheFilter</filter-name>
<url-pattern>/demo3/cache_a.html</url-pattern>
</filter-mapping>

案例

demo4,编码方式过滤器

encoding1.jsp

<body>

    <form action="encoding2.jsp" method="post">
name:<input type="text" name="name">
<input type="submit" value="Submit">
</form> </body>

encoding2.jsp

<body>

    <!-- 解决乱码方案一:使用request的setCharacterEncoding()方法,但是这样需要在每一个页面中都要写这段代码,比较麻烦-->
<%-- <%
request.setCharacterEncoding("UTF-8");
%> --%> <!-- 解决乱码方案二,所以过滤器就是一个不错的选择 -->
Hello:${param.name } </body>

Enconding.java

package com.test.demo4encodingFilter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.test.demo1Filter.HttpFilter; /**
* 编码方式过滤器,通过配置参数encoding指明使用何种字符编码方式,以处理Html form请求参数的中文问题
*/
public class EncodingFilter extends HttpFilter { private static final long serialVersionUID = 1L; private String encoding; @Override
protected void init() {
this.encoding = getFilterConfig().getServletContext().getInitParameter("encoding");
} @Override
public void doFilter(HttpServletRequest req, HttpServletResponse resp,
FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding(encoding);
System.out.println("编码:"+encoding);
chain.doFilter(req, resp);
} }

web.xml

  <filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.test.demo4encodingFilter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/demo4/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</context-param>

FIlter(2)—案例的更多相关文章

  1. iptables filter表案例、iptables nat表应用 使用介绍

    第7周第4次课(5月10日) 课程内容: 10.15 iptables filter表案例10.16/10.17/10.18 iptables nat表应用 扩展1. iptables应用在一个网段 ...

  2. Linux centos7iptables filter表案例、iptables nat表应用

    一.iptables filter表案例 vim /usr/local/sbin/iptables.sh 加入如下内容 #! /bin/bash ipt="/usr/sbin/iptable ...

  3. filter应用案例四:页面静态化

    1 说明 你到"当当"搜索Java分类图书时,"当当"会去查询数据库!每天都有很多人去搜索"Java分类"的图书,每次都去访问数据库,这会有 ...

  4. filter应用案例三:解决全站编码问题

    1 说明 乱码问题: 获取请求参数中的乱码问题: POST请求:request.setCharacterEncoding("utf-8"): GET请求:new String(re ...

  5. filter应用案例二:权限控制

    filter可以用来进行权限控制,比如admin文件夹下的文件只允许管理员进入,那么,可以给admin文件夹加上一个过滤器: 简单代码示例: import java.io.IOException; i ...

  6. filter应用案例一:分IP统计访问次数

    统计工作需要在所有资源之前都执行,那么就可以放到Filter中了.用Map<String,Integer>装载统计的数据.Map创建时间(使用ServletContextListener, ...

  7. 过滤器(Filter)案例:检测用户是否登陆的过滤器

    *****检测用户是否登陆的过滤器:不需要用户跳转到每个页面都需要登陆,访问一群页面时,只在某个页面上登陆一次,就可以访问其他页面: 1.自定义抽象的 HttpFilter类, 实现自 Filter ...

  8. iptables filter表 案例、iptables nat表的路由功能 、端口映射

    1.小案例 #!/bin/bashipt="/usr/sbin/iptables"$ipt -F$ipt -P INPUT DROP$ipt -P OUTPUT ACCEPT$ip ...

  9. java 过滤器filter使用案例

    主要需要 过滤器类  和配置文件 1.过滤器类 SessionFilter package com.service; import javax.servlet.*; import javax.serv ...

随机推荐

  1. day22 模块最后的补充。包。

    前一天内容复习: # def func(): # a # # def main(): # func() # # try: # main() # except: # pass # raise NameE ...

  2. js判断上传图片文件大小,尺寸,格式

    /** * 文件宽高 * @param eventId id * @param w 宽度 * @param h 高度 * @param callback 回调函数这里判断图片像素的方法是异步的,所以需 ...

  3. html-form

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. thinkphp5 model 模型

    新增更新都是save.saveAll  怎么识别他们 实例化模型后调用save方法表示新增: 查询数据后调用save方法表示更新: save方法传入更新条件后表示更新: isUpdate(true): ...

  5. hdu-2043解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2043 题意解析:目的是判断一串密码是否安全,条件是满足1.大写字母:A,B,C...Z;   2.小写 ...

  6. Nowcoder contest 370F Rinne Loves Edges (简单树形DP) || 【最大流】(模板)

    <题目链接> 题目大意: 一个 $n$ 个节点 $m$ 条边的无向连通图,每条边有一个边权 $w_i$.现在她想玩一个游戏:选取一个 “重要点” S,然后选择性删除一些边,使得原图中所有除 ...

  7. PostgreSQL 的命令行工具 psql 的常用命令

    1. 连接服务器: psql -h 192.168.1.88 -U username -d databasename 2. 切换数据库: \c dbname 3. 列出所有数据库: \l 4. 列出所 ...

  8. windows下z3安装

    从 github 上 clone Z3 git clone https://github.com/Z3Prover/z3.git 命令行中进入 Z3 文件夹,执行命令: python scripts/ ...

  9. javascript闭包和this对象

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...

  10. PAT (Advanced Level) Practise 1001 解题报告

    GiHub markdown PDF 问题描述 解题思路 代码 提交记录 问题描述 A+B Format (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判 ...