FIlter(2)—案例
案例
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)—案例的更多相关文章
- iptables filter表案例、iptables nat表应用 使用介绍
第7周第4次课(5月10日) 课程内容: 10.15 iptables filter表案例10.16/10.17/10.18 iptables nat表应用 扩展1. iptables应用在一个网段 ...
- Linux centos7iptables filter表案例、iptables nat表应用
一.iptables filter表案例 vim /usr/local/sbin/iptables.sh 加入如下内容 #! /bin/bash ipt="/usr/sbin/iptable ...
- filter应用案例四:页面静态化
1 说明 你到"当当"搜索Java分类图书时,"当当"会去查询数据库!每天都有很多人去搜索"Java分类"的图书,每次都去访问数据库,这会有 ...
- filter应用案例三:解决全站编码问题
1 说明 乱码问题: 获取请求参数中的乱码问题: POST请求:request.setCharacterEncoding("utf-8"): GET请求:new String(re ...
- filter应用案例二:权限控制
filter可以用来进行权限控制,比如admin文件夹下的文件只允许管理员进入,那么,可以给admin文件夹加上一个过滤器: 简单代码示例: import java.io.IOException; i ...
- filter应用案例一:分IP统计访问次数
统计工作需要在所有资源之前都执行,那么就可以放到Filter中了.用Map<String,Integer>装载统计的数据.Map创建时间(使用ServletContextListener, ...
- 过滤器(Filter)案例:检测用户是否登陆的过滤器
*****检测用户是否登陆的过滤器:不需要用户跳转到每个页面都需要登陆,访问一群页面时,只在某个页面上登陆一次,就可以访问其他页面: 1.自定义抽象的 HttpFilter类, 实现自 Filter ...
- iptables filter表 案例、iptables nat表的路由功能 、端口映射
1.小案例 #!/bin/bashipt="/usr/sbin/iptables"$ipt -F$ipt -P INPUT DROP$ipt -P OUTPUT ACCEPT$ip ...
- java 过滤器filter使用案例
主要需要 过滤器类 和配置文件 1.过滤器类 SessionFilter package com.service; import javax.servlet.*; import javax.serv ...
随机推荐
- Windows10上强制Visual Studio以管理员身份运行
解决办法很简单: 1. 打开VS的安装目录,找到devenv.exe,右键,选择“兼容性疑难解答”. 2. 选择“疑难解答程序” 3. 选择“该程序需要附加权限” 4. 确认用户帐户控制后,点击测试程 ...
- 【bzoj3174】[Tjoi2013]拯救小矮人
题解: 这题非常容易想到一个错误的贪心 就是按照ai排序 然后尽量取ai小的 但是有很明显的问题就是如果取了小的ai 那会导致那些原本可能存在这些ai就可以去掉的大的人因此不能取了 而有可能可以先去取 ...
- 【BZOJ4712】洪水
题解: 注意题目说了每个点的权值只能增加 每个点的dp方程比较简单 min(v[i],sum[i]) 那么我们考虑如果v[i]增加那么上面使用sum[i]的会带来影响 暴力的做就是一个个往上查然后修改 ...
- javascript小例子:實現四方向文本无缝滚动效果
实现一个文本无缝滚动的效果: <!DOCTYPE html> <!--[if lt IE 7 ]> <html lang="zh-CN" class= ...
- net core体系-web应用程序-4net core2.0大白话带你入门-4asp.net core配置项目访问地址
asp.net core配置访问地址 .net core web程序,默认使用kestrel作为web服务器. 配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Pr ...
- 【未解决】Linux下PHP安装扩展Mysql的问题
[步骤分析] 1.在PHP源码包下定位到指定位置:源码包/ext/mysqli 注1:网上很多地方红字部分是mysql,其实PHP5以后已经不用mysql了. 2.运行:/usr/local/php/ ...
- python爬取今日头条关键字图集
1.访问搜索图集结果,获得json如下(右图为data的一条的详细内容).页面以Ajax呈现,每次请求20个图集,其中 title --- 图集名字 artical_url --- 图集的地址 cou ...
- python之迭代器与生成器
python之迭代器与生成器 可迭代 假如现在有一个列表,有一个int类型的12345.我们循环输出. list=[1,2,3,4,5] for i in list: print(i) for i i ...
- 高效使用hibernate-validator校验框架
一.前言 高效.合理的使用hibernate-validator校验框架可以提高程序的可读性,以及减少不必要的代码逻辑.接下来会介绍一下常用一些使用方式. 二.常用注解说明 限制 说明 @Null 限 ...
- spring_AOP_XML
例子下载 对于xml的AOP配置主要集中在配置文件中,所以只要设置好配置文件就行了 beans.xml <?xml version="1.0" encoding=" ...