过滤器

来源:互联网 发布:打印机usb2.0 端口 编辑:程序博客网 时间:2024/04/30 07:13

过滤器

Servlet程序的主要分类:

标准Servlet(jsp)--mvc;

过滤Servlet(过滤器);

监听Servlet(监听器)

过滤器是为了安全

过滤器在web中主要起的作用?

过滤器是程序运行之后加入的

功能:

1,任何网站都需要对用户是否登录进行过滤

2,屏蔽非法文字

3,对请求内容进行统一编码

所在的类实现Filter接口,则就可以实现过滤器public interface Filter接口

接口中的方法:

public void init(FilterConfig filterConfig) throws ServletException

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException

public void destroy()

过滤器是一个组件,需要在web.xml中部署配置

<filter>

    <filter-name>first</filter>

    <filter-class>cn.lxh.FirstFilter</filter-class>

</filter>

<filter-mapping>

   <filter-name>first</filter-name>

   <!---于Servlet中的url-pattern不同,此处表示对那个页面进行过滤,如果全部都过滤,则"/*"-->

   <url-pattern>/filterdemo</url-pattern>

</filter-mapping>

如果过滤器要将内容传递到目的地,则需要使用FilterChain向下传递

过滤器会执行两次:FilterChain之前执行一次,之后再执行一次

在doFilter中可以使用RequestDispatcher进行跳转

过滤器实例:

1,前台页面

<form action="" method=" demo.jsp">

  <input name="" type="text" />

  <input name="" type="submit" />

</form>

2,过滤器

package cn.lxh.filter;

import java.io.IOException;

import javax.servlet.*;

public class FirstFilter implements Filter {

 public void init(FilterConfig filterConfig) throws ServletException
 {
  System.out.println("初始化");
 }
 
 public void doFilter(ServletRequest sreq, ServletResponse sres,
   FilterChain chain) throws IOException, ServletException 
 {
  String content=sreq.getParameter("content") ;
  if(content!=null)
  {
   if(content.indexOf("AAA")==-1) //没有查到指定的内容
   {
    //将请求继续下传
          chain.doFilter(sreq, sres);
   }
   else
   {
    System.out.println("有非法文字!");
    //如果需要的话,此处依然可以使用RequestDispatcher实现跳转
   }
  }
  else
  {
   chain.doFilter(sreq, sres);
  }
 }
 
 public void destroy()
 {
        System.out.println("销毁过滤器!");  
 }
 
}

3,配置web.xml

4,接收页面demo.jsp

<%= request.getParameter("");%>

实例2:

过虑编码

package cn.lxh.filter;

import java.io.IOException;

import javax.servlet.*;

public class FirstFilter implements Filter {

 public void init(FilterConfig filterConfig) throws ServletException
 {
  System.out.println("初始化");
 }
 
 public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain chain) throws IOException, ServletException 
 {
  try 
  {
   sreq.setCharacterEncoding("content");
  }
  catch (Exception e) {
          System.out.println("出错!");
  }
 }
 
 public void destroy()
 {
        System.out.println("销毁过滤器!");  
 }
 
}

实例3:登录验证

package cn.lxh.filter;

import java.io.IOException;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class FirstFilter implements Filter {

 public void init(FilterConfig filterConfig) throws ServletException
 {
  System.out.println("初始化");
 }
 
 public void doFilter(ServletRequest sreq, ServletResponse sres,
   FilterChain chain) throws IOException, ServletException 
 {
  //Session属于Http范畴,所以ServletRequest对象需要先转换成HttpServletRequest对象
  HttpServletRequest req=(HttpServletRequest)sreq;
  HttpSession session=req.getSession();
  //如果session不为空,则可以浏览其他页面
  if(session.getAttribute("uname")!=null)
  {
   chain.doFilter(req, sres);
  }else
  {
   sreq.getRequestDispatcher("login.jsp").forward(req, sres);
  }
 }
 
 public void destroy()
 {
        System.out.println("销毁过滤器!");  
 }
 
}