我认为:过滤器的基本原理就是,开始加载的时候就设定一些访问条件,当访问者访问某些特定的页面时,由于与从配置文件中读取的一些过滤信息相符合,因此就对那个用户的某些功能加以限制,也就是过滤的功能。
1.首先要实现一个过滤器
package filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class AddressFilter implements Filter{
private FilterConfig filterConfig=null;
private String addressProhibited=null;
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig=filterConfig;
addressProhibited=filterConfig.getInitParameter("addressProhibited");
//读取配置文件中的参数
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
//获取客户端ip地址
String address=((HttpServletRequest)request).getRemoteAddr();
System.out.println("address="+address);
if(address.equals(addressProhibited)) {
response.setContentType("text/html;charset=GBK");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>这个地址禁止访问</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1 align='center'>这个地址禁止访问</h1>");
out.println("</body>");
out.println("</html>");
out.flush();
return;//结束当前方法,不调用后续的过滤器链或Web资源
}
//调用后续的过滤器链(如果没有后续的过滤器就访问Web资源)
chain.doFilter(request, response);
}
public void destroy() {
// TODO Auto-generated method stub
this.filterConfig=null;
}
}
2.其次,是在配置文件中设置过滤信息,以便过滤器读取相关信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>AddressFilter</filter-name>
<filter-class>filter.AddressFilter</filter-class>
<init-param>
<param-name>addressProhibited</param-name>
<param-value>192.168.1.1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AddressFilter</filter-name>
<url-pattern>/hello.jsp</url-pattern>
</filter-mapping>
</web-app>
3.访问相关页面并进行测试。