- 浏览: 54074 次
- 性别:
- 来自: 洛阳
文章分类
最新评论
web.xml之过滤器详解
一、过滤器介绍(是个什么东西)
filter功能.它使用户可以改变一个request和修改一个 response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).一个filter 包括:
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查servlet request;
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获.
二、执行步骤
①项目启动实例化
②调用init方法初始化(为执行过滤做准备)
③调用dofilter执行过滤方法(用户在前后端交互操作时)
④调用destory方法销毁(在线程退出、超时或者停止项目时)
三、过滤器配置
①在xml注册声明以及映射等操作
②在过滤器实现类中实现filter接口
四、过滤器接口介绍
1、init(用来初始化)
2、dofilter(用来执行具体的操作)
此方法是由Servlet容器提供给开发者的,用于对资源请求过滤链的依次调用,通过FilterChain调用过滤链中的下一个过滤 器,如果是最后一个过滤器,则下一个就调用目标资源。
3、destory(用来销毁)
重要备注:::
在web.xml中你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用.
本次例子会附上:
1、字符集编码格式过滤
2、sql防注入过滤
3、不缓存页面的过滤器
具体的代码案例
一、配置
<filter>//过滤器实现,以及地址 <filter-name>patronliFilter</filter-name>//定义名字 <filter-class>com..servlet.FwpFilter</filter-class>//实现类 </filter> <filter-mapping>//映射过滤器拦截规则 <filter-name>patronliFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> //如果想要配置多个拦截器,可以依次向下写
二、具体的实现类以及实现的拦截功能(字符集编码格式过滤)
package com.patronli.servlet; import java.io.IOException; import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringEscapeUtils; public class patronliFilter implements Filter { @Override public void destroy() { 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.setCharacterEncoding("utf-8"); // HttpSession session = request.getSession(); // String url = request.getServletPath(); Map<String, String[]> map = request.getParameterMap(); // 一下方法可以打印出来用户请求和返回的参数以及响应请求地址 // 生产测试遇到问题查起来很方便 System.out.println("请求或响应的地址为:::" + request.getRequestURI()); for (Map.Entry<String, String[]> entry : map.entrySet()) { for (String str : entry.getValue()) { System.out.println("请求或响应的参数有:::" + entry.getKey() + ":" + str); str = StringEscapeUtils.escapeHtml(str); } } // 会去顺序执行当前过滤器下面的过滤 arg2.doFilter(arg0, arg1); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("执行了销毁的方法..."); } }
(sql防注入过滤)
package com.patronli.servlet; import java.io.IOException; import java.util.Enumeration; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fuiou.fwp.util.ConfigReader; /** * 过滤sql关键字的Filter * */ public class PatronliFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { // throw new UnsupportedOperationException("Not supported yet."); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; String requestUri = req.getRequestURI(); // 获得所有请求参数名 Enumeration params = req.getParameterNames(); System.out.print(req.getRequestURL()); String str = ""; while (params.hasMoreElements()) { String name = params.nextElement().toString(); String[] value = req.getParameterValues(name); for (int i = 0; i < value.length; i++) { str = str + value[i]; } } if (sqlValidate(str)) { //返回错误页面 res.sendRedirect(req.getContextPath() + "/500.jsp"); } else { chain.doFilter(req, res); } } // 效验 protected static boolean sqlValidate(String str) { // 统一转为小写 str = str.toLowerCase(); System.out.println("防sql注入过滤:"+str); // 过滤掉的sql关键字,可以手动添加 String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" + "char|declare|sitename|net user|xp_cmdshell|;|or|+|,|like'|and|exec|execute|insert|create|drop|" + "table|from|grant|use|group_concat|column_name|" + "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" + "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#|=|(|scrip"; String[] badStrs = badStr.split("\\|"); for (int i = 0; i < badStrs.length; i++) { if (str.indexOf(badStrs[i]) >= 0) { System.out.println(str+" ====触犯sql注入规则==》"+badStrs[i]); return true; } } return false; } public void destroy() { // throw new UnsupportedOperationException("Not supported yet."); } }
(不缓存页面的过滤器 -有借鉴)
package com.patronli.servlet; import java.io.IOException; import java.util.Enumeration; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fuiou.fwp.util.ConfigReader; /** * 用于的使 Browser 不缓存页面的过滤器 */ public class patronliFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException { ((HttpServletResponse) response).setHeader("Cache-Control","no-cache"); ((HttpServletResponse) response).setHeader("Pragma","no-cache"); ((HttpServletResponse) response).setDateHeader ("Expires", -1); filterChain.doFilter(request, response); } public void destroy() { } public void init(FilterConfig arg0) throws ServletException { } }
发表评论
-
Condition
2017-01-03 16:58 0condition的应用 -
dubbo的运用以及应用demo
2017-07-08 16:07 981一、背景描述 接触dubbo也是比较晚了,由于公司底层通信太 ... -
java对sftp文件进行上传、下载、删除等操作,附详细demo
2016-12-22 18:01 2077这是自己总结的一个类,包含连接sftp,上传,下载等操作,附件 ... -
servlet监听器功能讲解及代码案例
2017-07-08 16:54 614servlet监听器功能讲解及代码案例 监听器的功能很强大, ... -
web.xml之session超时设置 以及设置session超时的几种方法
2016-10-20 16:39 1179web.xml之session超时设置 先说正题,web. ... -
poi导出excel清晰 步骤详解
2016-10-14 14:08 841poi导出excel清晰 步骤详解 一、本次生成excel ... -
struts2下载文件最简化版清晰详解
2016-10-14 11:20 612struts2下载文件最简化版清晰详解 一、应用场景如下: ... -
poi解析excel步骤详解
2016-10-14 10:42 2113poi解析excel步骤详解 一、本次解析excel应用场景 ... -
struts2文件上传详解
2016-10-13 11:26 804struts2文件上传详解 一、jsp代码 <fo ... -
ThreadLocal用法详解
2016-09-29 10:44 1599ThreadLocal用法详解 1.ThreadLocal的 ... -
JSONObject、JSONArray、xml的常用操作
2016-09-28 16:33 1361JSONObject、JSONArray、xml的常用操作 ... -
Rsa签名算法详解
2016-09-22 09:48 4621Rsa签名算法详解 签名生成规则与验证签名规则如下: ... -
Quartz定时任务的实现及详解
2016-09-21 18:03 2141Quartz定时任务的实现及详解 平常工作中经常遇到写定时任 ... -
四种线程池的特性以及测试代码
2016-09-21 09:20 901四种线程池的特点如下 ... -
操作json
2016-09-18 13:01 627总是记不住一些零碎的知识点,这次开个专栏来记录,不定期更新: ... -
日期类型转换
2016-09-18 12:50 531总是记不住一些零碎的知识点,这次开个专栏来记录,不定期更新: ... -
配置文件的读取与写入
2016-09-14 17:00 647读取配置文件: public static void m ... -
HttpPoster接口调用
2016-09-13 13:47 1619工作中经常用到的东西,这也是自己在公司的基础上改造的,感觉挺好 ... -
md5加密
2016-09-13 13:39 593md5工具类如下所示,可以直接拿走用,分享记录一下 pack ... -
AES加密与解密
2016-09-13 13:37 473这个其实是我们项目里面的一个工具类,给大家做一下分享 aes ...
相关推荐
以上示例中,我们定义了一个名为"My Web App"的Web应用,其中包含了一些基本信息(如显示名称、描述等),还定义了一个过滤器、监听器以及Servlet的映射关系。 #### 四、版本差异 需要注意的是,`web.xml` 文件的...
这些过滤器可以被配置在`web.xml`中,与Servlet一样,通过`<filter>`和`<filter-mapping>`标签来定义。 至于容器,这里指的是Spring的IoC容器,它负责管理应用程序中的对象及其依赖关系。`WebApplicationContext`是...
- **Filter**:过滤器可以拦截请求和响应,进行预处理和后处理,比如登录验证、字符编码转换等。 - **Listener**:监听器监听特定事件,如会话创建、销毁、请求初始化等,可用来实现一些辅助功能。 7. **部署描述...
使用JSP过滤器的注意事项包括:确保过滤器的配置正确,避免在doFilter方法中引起循环引用或无限递归,合理使用过滤器链的调用顺序,以及正确配置web.xml文件以避免部署时出现错误。开发者在设计过滤器时应当尽量保证...
最后,为了确保应用能够接收到分享内容,还需要在AndroidManifest.xml文件中声明对应的Intent过滤器。通过设置标签,指定ACTION_VIEW和DATA类型,让系统知道我们的应用可以处理特定类型的分享内容。 总结来说,...
`web.xml`则是Web应用的部署描述符,配置SpringMVC的DispatcherServlet和其他过滤器。 6. **注解的使用**:在SSM框架中,注解如@Controller、@Service、@Repository和@RequestMapping等被广泛使用,它们简化了XML...
1. **src/main/java** - 这里包含了项目的Java源代码,通常会有如`com.example.demo`这样的包结构,其中定义了Controller、Service、DAO层的类,以及Shiro的相关配置和过滤器。 2. **src/main/resources** - 存放...
在`springboot-shiro-mybatis-demo`项目中,`pom.xml`需要引入SpringBoot、Shiro、MyBatis以及相关的依赖。例如,SpringBoot的启动器、Shiro的相关库、MyBatis的依赖以及MySQL驱动等。这些依赖使得我们可以快速地...
在Java Web开发中,Spring、Mybatis和Druid是常用的三大组件,它们分别负责控制层、持久层和数据源管理。本示例整合了这三者,旨在提供一个高效、稳定且易于维护的开发环境。下面将详细介绍这三个组件以及它们的整合...
《SpringBoot整合Shiro实现权限控制与登录验证详解》 在现代Web开发中,权限管理和安全验证是不可或缺的重要环节。本教程将详细讲解如何利用SpringBoot框架与Apache Shiro库结合,实现用户登录验证、记住密码功能,...
4. Filter:Shiro的过滤器链是实现Web安全的关键,如authc(认证)、perms(权限)、roles(角色)等过滤器,它们根据配置拦截特定的URL,并执行相应的安全逻辑。 四、实践示例 以一个简单的登录为例,当用户提交...
**Spring MVC Security Demo详解** Spring MVC是Spring框架的一部分,它为构建基于Java的Web应用程序提供了模型-视图-控制器(MVC)架构。而Spring Security则是一个强大的安全框架,用于处理Web应用程序的安全性,...
`LuceneDemo`通常包含更复杂的例子,可能涉及多字段搜索、评分机制、过滤器以及排序等功能。这个示例可能涵盖了从数据源读取数据、创建索引、查询优化和结果处理的完整流程。学习此示例,可以帮助你理解如何利用`...
了解和掌握Log4j的常用配置对于Java开发人员来说至关重要,因为它可以帮助我们调试代码、追踪错误以及监控系统运行状态。下面,我们将深入探讨Log4j的基本概念、配置选项以及一个简单的Demo。 ### 1. Log4j基本概念...
在Web应用的`web.xml`中,配置Shiro的过滤器链,设置`filter-mapping`以拦截所有请求。 #### 3.5 自定义Realm 创建自定义Realm,继承自`AuthorizingRealm`,重写`doGetAuthenticationInfo`和`...
这可以通过在web.xml中添加CAS过滤器和监听器来完成,这些组件会处理CAS服务的认证请求和响应。 3. **CAS登录流程** 用户首次访问受保护的资源时,会被重定向到CAS服务器进行身份验证。成功后,CAS服务器返回一个...
**Mina 框架详解及DEMO演示** Apache Mina 是一款开源的网络通信框架,主要用于构建高性能、高效率的网络应用服务器。Mina 提供了一种抽象层,简化了网络编程,允许开发者专注于业务逻辑,而无需关心底层协议的实现...
-- 字符编码过滤器 --> <filter-name>CharacterEncodingFilter <filter-class>org.springframework.web.filter.CharacterEncodingFilter <param-name>encoding <param-value>UTF-8 <param-name>...
此外,还提供了过滤器链来处理静态资源,减少了Servlet调用,提升了性能。 5. 增强的安全性 Servlet 3.1引入了更强大的安全特性,如HTTP Strict Transport Security(HSTS)和Content Security Policy(CSP),帮助...
过滤器可以设置优先级和参数,优先级用于确定过滤器的执行顺序,参数用于传递数据给过滤器。 过滤器的典型应用 过滤器的典型应用包括身份验证、日志记录、压缩响应等。 监听器的概念 监听器是Servlet规范中的一...