首页 > 编程知识 正文

java过滤器获取所有参数值,java过滤器实例

时间:2023-05-06 16:08:45 阅读:41834 作者:1428

请转载原文地址。 http://www.cn blogs.com/ygj 0930/p/6374212.html

过滤器概述过滤器也称为过滤器,是servlet技术中最令人兴奋的技术之一,WEB开发人员通过过滤器技术对WEB服务器管理的所有WEB资源,如Jsp

拦截servlet、静止图像文件和静止html文件等,实现一些特殊功能。 例如,实现URL级别权限访问控制、机密术语的过滤、响应信息的压缩等

一些高级功能。

如图所示,来自浏览器的请求传递给第一个过滤器进行过滤,如果符合规则则释放,传递给过滤器链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端请求通过链中的所有过滤器后,即可访问资源文件,如果无法通过,则可能由中间过滤器处理。

过滤器链代码的执行顺序如下。

功能:筛选器通常用于验证登录权限、控制资源访问权限、过滤敏感术语、转换字符编码等操作,便于代码重用,无需对每个servlet执行相应的操作。

简单应用过滤器1 .创建过滤器,创建新的class,然后实现接口过滤器。 (注意:这是javax.servlet的过滤器。 )

2 .重写过滤器的三种方法

import java.io.IOException; 导入javax.servlet.filter; 导入javax.servlet.filter chain; 导入javax.servlet.filter config; 导入javax.servlet.servlet exception; 导入javax.servlet.servlet request; 导入javax.servlet.servlet response; publicclassloginfilterimplementsfilter { @ overridepublicvoiddestroy () {//todo自动生成方法stub } @ overridepublicvoiddofilter (servletrequestarg 0,ServletResponse arg1,FilterChain arg2) throws IOException, servlet exception {//todo auto-generatedmethodstub } @ overridepublicvoidinit (filterconfigarg0) Throwsservletexception 使用todo auto-generatedmethodstub }//do filter (servletrequestarg 0,ServletResponse arg1,FilterChain arg2)方法进行过滤操作

//init(filterconfigarg0)方法获取初始化参数,通常可以不重写

//destroy ()方法通常是重写的

http servlet请求=(http servlet请求) arg0; request对象http servlet响应=(http servlet响应) arg1; 响应对象http session session=request.getsession (); 获取session对象过滤器操作代码. ……chain.dofilter(request,response ); //释放、通过当前过滤器并传递给下一个过滤器进行过滤的注意事项:在doFilter (在方法中为chain.doFilter )之前的是对request执行的过滤操作是常见的,chin filter

在web.xml中放置过滤器。 在这里,请记住原则。 在web.xml中,这是侦听器过滤器的servlet。 也就是说,在web.xml中,侦听器位于过滤器之前,过滤器位于servlet之前。 否则会出错。

过滤器过滤器- nameloginfilter/filter-name//过滤器名称filter-classcom.ygj.control.loginf ilter/filter-class /文件

ram-value> </init—pamm> </filter> <filter-mapping>//过滤器映射 <filter-name>loginFilter</filter-name> <url—pattern>指定过滤器作用的对象</url-pattern>

在配置中需要注意的有两处:一是指明过滤器类所在的包路径。二是处定义过滤器作用的对象。一般有以下规则:

注:如果一个过滤器需要过滤多种文件,则可以配置多个映射,一个mapping定义一个url-pattern来定义过滤规则,配置如下:

<filter> <filter-name>loginFilter</filter-name> <filter-class>com.ygj.control.loginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> Filter的生命周期

1、Filter的创建
  Filter的创建和销毁由web服务器负责。 web应用程序启动时,web服务器将创建Filter的实例对象,并调用其init方法,完成对象的初始化
功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。通过init方法的参数,可获得代表当前
filter配置信息的FilterConfig对象。

2、Filter的销毁
  web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。在destroy方法中,可以释放过滤器使用的资源。

3、FilterConfig接口
  用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了
filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得:
  String getFilterName():得到filter的名称。
  String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
  Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
  public ServletContext getServletContext():返回Servlet上下文对象的引用。

下面是两个常用例子

例1:用过滤器实现登录验证,没登录则驳回访问请求并重定向到登录页面。

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest) arg0; HttpServletResponse response=(HttpServletResponse) arg1; HttpSession session=request.getSession(); String path=request.getRequestURI(); Integer uid=(Integer)session.getAttribute("userid"); if(path.indexOf("/login.jsp")>-1){//登录页面不过滤 arg2.doFilter(arg0, arg1);//递交给下一个过滤器 return; } if(path.indexOf("/register.jsp")>-1){//注册页面不过滤 arg2.doFilter(request, response); return; } if(uid!=null){//已经登录 arg2.doFilter(request, response);//放行,递交给下一个过滤器 }else{ response.sendRedirect("login.jsp"); } }

例2:设置字符编码

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest request2=(HttpServletRequest) request; HttpServletResponse response2=(HttpServletResponse) response; request2.setCharacterEncoding("UTF-8"); response2.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。