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中的令牌值,然后执行数据处理;如果不相等,则提示用户己经提交过了表单,同时产生一个新的令牌值。
分享到:
相关推荐
在JAVA Web开发中,过滤器(Filter)是一个至关重要的组件,它主要负责在请求被Servlet处理之前或之后执行一些预处理或后处理...在实际项目中,根据需求合理设计和使用过滤器,能够大大提升应用程序的质量和用户体验。
Servlet过滤器是Java Web应用程序中的一个重要组成部分,它提供了一种灵活的方式来对客户端的请求和服务器的响应进行预处理和后处理。这种机制允许开发者在不改变核心业务逻辑的情况下增强应用程序的功能。 #### 二...
Servlet过滤器是按照指定的配置顺序进行调用的,能够实现数据的预处理、后处理、权限控制、字符编码转换等多种功能,极大地增强了Web应用程序的功能性和灵活性。 Servlet过滤器的实现基于Java Servlet API中的...
5. **过滤器的应用场景**:在Web开发中,过滤器常用于认证、授权、日志记录、数据转换等任务。例如,`HttpServletFilter`是Servlet API中定义的一个基础过滤器类型,可以拦截HTTP请求和响应。 6. **配置过滤器**:...
在实际开发中,过滤器的使用可以大大提高代码的可维护性和复用性,减少重复代码,同时提供了一种灵活的方式来增强Web应用程序的功能。 总之,过滤器是Web开发中的一个重要组件,它能够帮助我们实现各种功能,包括但...
1. init():在 Web 应用程序启动时,Web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中。Web 容器创建 Filter 对象实例后,将立即调用该 Filter 对象的 init...
在IT行业中,Web过滤器(Web Filter)是一种用于在Web应用程序中执行特定任务的机制,主要目的是为了增强或改变HTTP请求和响应的处理过程。在C#编程环境下,我们可以使用ASP.NET框架来实现Web过滤器,它对于构建安全...
【如何配置Filter过滤器处理JSP中文乱码】 在开发Java Web应用时,尤其是在处理包含中文字符的请求时,可能会遇到中文乱码的问题。解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP...
在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的状态。这篇文章将对这两者的应用进行深入的总结。 **过滤器Filter** 过滤器是在...
用户登陆过滤器 用户登陆过滤器是一个用于...在实际应用中,这个过滤器可以应用于各种Web应用程序中,以保护用户数据的安全和隐私。 用户登陆过滤器是一个非常重要的安全机制,可以帮助我们保护Web应用程序的安全性。
在Java Web开发中,过滤器...总结,过滤器是Java Web开发中的强大工具,它们可以增强应用程序的安全性、性能和用户体验。通过理解过滤器的工作原理和实现方式,开发者能够更好地控制和优化Web应用的请求处理流程。
【Java Web开发中的过滤器组件应用及实例解析】 ...理解过滤器的工作原理和如何在项目中有效利用它们,对于提升Java Web应用的健壮性和灵活性至关重要。通过实例分析,我们可以更直观地掌握过滤器的配置和使用方法。
**AngularJS过滤器filter详解** AngularJS是一款强大的前端JavaScript框架,用于构建动态Web应用程序。过滤器是AngularJS中一个至关重要的特性,它允许我们在数据展示时进行格式化和转换,从而提升用户体验。过滤器...
在Java Web开发中,过滤器(Filter...总之,Java Web中的过滤器Filter是实现高效、安全和可控Web应用程序的关键工具,尤其是在与JDBC交互时。通过熟练掌握过滤器的使用,开发者可以编写出更健壮、更安全的Web应用程序。
在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,比如防止跨站脚本攻击(XSS)、处理字符编码问题、实现权限控制等。在这个主题中,我们将深入理解Filter的...
例如,在Web应用程序中,我们可以使用过滤器来将图像格式从JPEG转换为PNG,以提高图像的质量。 五、响应内容压缩 过滤器可以对响应的内容进行压缩。例如,在Web应用程序中,我们可以使用过滤器来压缩响应的内容,以...
如果你的 Web 应用需要支持旧版服务器,就不能使用过滤器。 通过本文,我们可以了解到 Servlet 过滤器 Filter 是一个非常强大且标准的机制,能够提供一种模块化的方式来封装公共的行为,并能够对许多不同的资源进行...
在实际应用中,Filter 广泛应用于各种 Web 应用程序,例如身份验证、权限控制、日志记录等。Filter 的使用可以提高应用程序的安全性和可靠性,但是需要合理地配置和使用 Filter,以免影响应用程序的性能。
总的来说,Servlet过滤器是Java Web应用程序中的强大工具,它们提供了对HTTP请求和响应的透明处理,帮助我们实现了各种跨切面关注点,如安全性、性能优化等,而无需侵入到业务逻辑中。通过熟练掌握和运用Servlet过滤...