`
ufopw
  • 浏览: 159885 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

WEB应用程序中的过滤器Filter

阅读更多
javax.servlet.Filter接口:开发过滤器要实现此接口,init()初始化方法,一般用于得到配置文件中的初始化参数;doFilter()过滤器方法,在特定的操作完成后,可以调用chain.doFilter()将请求传给下一个过滤器或目标资源,也可以直接向客户端返回响应信息,或者利用RequestDispatcher.forward()和include()方法,及HttpServletResponse.sendRedirect()方法将请求转向其它资源。destroy(),过滤器生命周期结束,用来释放资源。

过滤器在web.xml文件中的部署如下:
<!-- 编码过滤器 -->
<filter>
   <filter-name>encoding</filter-name>
   <filter-class>
    com.website.util.webutil.EncodingFilter
   </filter-class>
   <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>encoding</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
Servlet容器对声明的每一个过滤器,只创建一个实例。容器将在同一个过滤器实例上运行多个线程来同时为多个请求服务。
<filter-mapping>元素还可以包含0-4个<dispatcher>指定过滤器对应的请求方式,可以是REQUEST,INCLUDE,FORWARD,ERROR,默认是REQUEST。
过滤器代码如下:
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;

/**
* 编码过滤器,用于处理乱码问题
*
* @author annlee
*/
public class EncodingFilter implements Filter {

private String encoding;//目标编码类型,从web.xml配置文件中读取

public void destroy() {
}

/**
* 编码过滤
* @throws ServletException
* @throws IOException
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   request.setCharacterEncoding(encoding);
   chain.doFilter(request, response);
   response.setContentType("text/html;charset="+encoding);
}

public void init(FilterConfig config) {
   this.encoding = config.getInitParameter("encoding");
}

}
过滤器不能够直接改变请求和响应对象的状态,但是我们可以利用请求和响应的包装类来间接改变请求和响应的信息,在Servlet规范中,定义了4个包装类:ServletRequestWrapper,ServletResponseWrapper,HttpServletRequestWrapper,HttpServletResponseWrapper。
过滤器主要的应用场景包括:
1,对用户请求进行统一认证。2,对用户的访问请求进行记录和审核。3,对用户发送的数据进行过滤或替换。4,转换图像格式。5,对响应内容进行压缩,减少传输量。6,对请求和响应进行加解密处理。7,触发资源访问事件。8,对XML的输出应用XSLT。

常用字符集:
1,ASCII:American Standard Code for Information Interchange美国信息互换标准代码,是当今最通用的单字节编码系统。用一个字节来表示字符,最多能够表示256种字符。
2,ISO-8859-1:0-127的字符与ASCII相同,通常叫做Latin-1,包括了书写所有西文欧洲语言不可缺少的附加字符。
3,GB2312和GBK:GB2312是大陆标准汉字信息交换用编码。简称国标码。用两个字节来表示一个字符,分别称为高位和低位,为了与ASCII码区别,最高位都用1来表示,GBK是1995年新推出的规范,还不是国家标准,并不是所有的国际化软件都支持。
4,Unicode:统一的字符编码标准集,使用0-65535的双字节无符号数对每一个字符进行编码。在Internet上,大多数的信息都是用英文来表示的,如果都采用Unicode码,将会使数据量增加一倍,可以使用下面介绍的UTF-8编码。
5,UTF-8:English-bit UCS Transformation Format,对于常用的字符,即0-127的ASCII字符,UTF-8用一个字节来表示。
JAVA内部采用Unicode字符集来表示字符。当JAVA读取字符数据时,需要将本地字符集编码转换为Unicode编码,而在输出字符数据时,则需要将Unicode编码转换为本地字符集编码。

以POST方法提交的表单,可以在获取请求参数值之前,调用request.setCharacterEncoding("GBK"),在向浏览器发送中文数据之前,调用response.setContentType("text/html;charset=GBK"),指定输出内容的编码方式是GBK。
以GET方式提交的表单,只能在得到请求参数的值后作编码转换String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "GBK");

对于JDBC驱动程序,JAVA程序和数据库之间传递数据都是以ISO-8859-1为默认编码格式,要解决编码问题,要将数据库默认的编码格式改成自己想要的编码格式。

让Tomcat支持中文文件名或者中文URL要在<connector>元素中加上属性URIEncoding="UTF-8"就可以了。

Servlet规范中定义了四种验证机制:
1,HTTP Basic Authentication:用户名和密码采用BASE64编码,浏览器弹出对话框的形式,没有加密,不安全。
2,HTTP Digest Authentication:用户名和密码采用MD5算法加密,虽然比基本验证要更加安全,但目前并没有得到广泛的使用。
3,HTTPS Client Authentication:在SSL基础上的HTTPS验证,几乎所有的浏览器和Servlet容器都支持HTTPS协议,它是这四种中最安全的,不过实现的代价也是最高的。
4,Form Based Authentication:基于表单的验证类型于基本验证,而不是浏览器弹出对话框。用户名和密码也是明文的方式来传输的。

声明式安全:在web.xml文件中指定WEB应用程序的安全处理机制,这使得一个WEB应用程序无须修改任何代码就可以获得安全性。默认情况下,WEB应用程序的所有资源对每一个人都是可以访问的,通过在web.xml文件中配置<security-constraint>和<login-config>元素来限制对资源的访问。

防止SQL注入攻击:使用PrepareStatement,而不要使用Statement,不要使用String的+号来组装sql语句。
系统的出错信息不要直接提供给客户端,只应提供一些一般化的错误信息。用户输入数据的检查应充分,应该在客户端和服务器端都对用户输入的数据进行严格的检查,需要时,可以过滤输入数据中包含的特殊字符。对于sqlserver数据库,应该删除一些不必要的存储过程,如xp_cmdshell,xp_startmail,xp_sendmail,sp_makewebtask等。

利用同步令牌来解决重复提交的基本原理如下:
1,用户访问提交数据的页面,服务器端在这次会话中,创建一个Session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到客户端,同时将令牌值保存到Session中。
2,用户提交页面,服务器先判断令牌值是否相等,相等南昌清除Session中的令牌值,然后执行数据处理;如果不相等,则提示用户己经提交过了表单,同时产生一个新的令牌值。
分享到:
评论

相关推荐

    filterus-masterPHP过滤库.zip

    验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。设计 PHP 的过滤器扩展的目的是使数据过滤更轻松快捷。为什么使用过滤器?几乎所有 web 应用程序都依赖外部的输入。这些数据通常来自用户或其他...

    PHP Filter过滤器全面解析

    验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。 设计 PHP 的过滤器扩展的目的是使数据过滤更轻松快捷。 为什么使用过滤器? 几乎所有 web 应用程序都依赖外部的输入。这些数据通常来自用户...

    clacks-filter:用于 Java Web 应用程序的 GNU Terry Pratchett Clacks 过滤器

    用于 Java Web 应用程序的 GNU Terry Pratchett Clacks 过滤器 用法: 将 ClacksFilter.java 文件复制到您的应用程序中。 在您的 web.xml 文件中放置以下 XML: &lt; filter&gt; &lt; filter&gt;ClacksFilter&lt;/ filter&gt; &lt; ...

    botwall4j:Java Web应用程序的僵尸墙

    该项目实现了ResponseHardening servlet过滤器,该过滤器充当Java Web应用程序的僵尸墙。 过滤器透明地将网页上的所有input和form元素重写为随机值,这使得它们更难自动抓取。 您不需要修改您的应用程序。 使用说明...

    dms-filter-master基于标注的PHP过滤库.zip

    &lt;?... namespace DMS\Filter; class Filter implements FilterInterface ...通过使用过滤器,您能够确保应用程序获得正确的输入类型。您应该始终对外部数据进行过滤!输入过滤是最重要的应用程序安全课题之一。

    Java Web程序设计教程

    1.1.2web应用程序 2 1.2使用java开发web应用 3 1.2.1面向对象的编程语言 3 1.2.2丰富的框架技术 4 1.2.3xml、css的应用 4 1.2.4使用javascript与ajax提升用户体验 7 1.3多种集成开发环境 9 1.3.1集成开发环境...

    ng-filter:角度过滤器的汇编,可能有助于 Web 应用程序的事实节奏开发

    过滤器角度过滤器的汇编,可能有助于 Web 应用程序的事实节奏开发

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素...

    repo-filter:Web应用程序使用GitHub存储库API,并在浏览器中显示可搜索的过滤列表

    回购过滤器关于该项目正在进行的工作-一个Web应用程序,旨在使用GitHub存储库API并在浏览器中显示可搜索的过滤列表。 建于React.js 阿波罗客户Node.js Webpack安装分叉并克隆存储库。 运行npm install下载依赖项。 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素...

    AjaxAnyWhere中文帮助文档.pdf

    例程11-22 将Web 应用程序中的URL 以后缀.jsp,do,htm 结尾的请求全部有过滤器AAFilter 过滤。而在实 际项目中,可以根据项目实际需求来修改url-pattern 的值,定制要应用AjaxAnywhere 的请求类型,即只有特定 的...

    udagram-image-filter:用于Udagram应用程序的图像过滤器微服务

    Udagram图像过滤微服务Udagram是与Udacity Cloud Engineering Nanodegree一起开发的简单云应用程序。 它允许用户注册和登录Web客户端,将照片发布到提要中,并使用图像过滤微服务处理照片。 可以在以下位置找到AWS上...

    Struts2执行流程

    Struts2执行流程 1. web.xml 部署描述符 2. FilterDispatcher 实现StrutsStatics, Filter接口 (1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet...过滤器的配置在Web应用程序的部署描述符中.

    (重温)JavaWeb–Filter 过滤器(JavaWeb 的三大组件之一)

    三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是 JavaEE 的规范。也就是接口 Filter 过滤器它的作用是:拦截请求,过滤响应。  拦截请求常见的应用场景有: 1、权限检查 2、...

    SpringFilter:Springboot过滤器示例

    Web应用程序上下文功能 使用Spring函数困难 通常,实现编码,CORS,XSS,LOG,证书,授权等。 拦截器 它是Spring的Spring Context的功能,是一种Bean 因为它是一个Spring容器,所以它可以注入其他bean并具有良好的...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    8.8.1 Struts Prepare And Execute Filter过滤器 8.8.2 struts.xml文件配置出错 8.9 精彩回顾 第9章 庖丁解牛 ——揭密Struts2高级技术 9.1 本章学习任务 9.1.1 本章知识体系 9.1.2 实例开发任务 9.2 OGNL表达式...

    Spamfilter:垃圾邮件过滤器

    您将需要创建一个“Web 应用程序的客户端 ID”(将 JavaScript Origins 设置为您的站点并将重定向 URI 设置为空)以及一个公共 API 密钥。 在 js/authutil.js 中,相应地修改 clientId 和 apiKey 变量。

    hypno-lua-filter:Hypno Web服务器的Lua过滤器

    黎凡特过滤器这是一个用Lua编写的示例应用程序。文件和目录app / *。lua-用Lua编写的模型。 misc / *-SSL证书,日志等在此处。 sql / *-用于执行SQL文件。静态/ *-项目随附的所有静态资产。测试/ *-所有测试都在这里...

Global site tag (gtag.js) - Google Analytics