1、ip过滤
IpFilter:
package com.cn.filter; 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; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class IpFilter implements Filter { private String ip; public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("ipFilter"); //获取请求ip String clientIp = request.getRemoteAddr(); System.out.println("ip=" ip); System.out.println("clientIp=" clientIp); if(!clientIp.equals(ip)){ chain.doFilter(request, response); }else{ HttpServletRequest req = (HttpServletRequest)request; req.getRequestDispatcher("sorry.jsp").forward((HttpServletRequest)request, (HttpServletResponse)response); } } public void init(FilterConfig filterConfig) throws ServletException { ip = filterConfig.getInitParameter("ip"); } }
web.xml:
<!-- 配置过滤器 --> <filter> <filter-name>ipFilter</filter-name> <filter-class>com.cn.filter.IpFilter</filter-class> <init-param> <param-name>ip</param-name> <param-value>127.0.0.1</param-value> </init-param> </filter> <filter-mapping> <filter-name>ipFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.统计访问人数
CountFilter:
package com.cn.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; public class CountFilter implements Filter { int count = 0; //销毁 public void destroy() { } //执行 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("countFilter"); count++; //强转类型 HttpServletRequest req = (HttpServletRequest)request; ServletContext servletContext = req.getSession().getServletContext(); servletContext.setAttribute("count", count); //向下传递请求 chain.doFilter(request, response); } //初始化 public void init(FilterConfig filterConfig) throws ServletException { String cou = filterConfig.getInitParameter("count"); count = Integer.parseInt(cou); } }
CountServlet:
package com.xtkj.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CountServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext servletContext = request.getSession().getServletContext();
Object count = servletContext.getAttribute("count");
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print("您是第"+count+"位访问该网站的用户!");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
web.xml
<filter>
<filter-name>countFilter</filter-name>
<filter-class>com.cn.filter.CountFilter</filter-class>
<!-- 配置默认参数 -->
<init-param>
<param-name>count</param-name>
<param-value>3000</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>countFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、图片防盗(不允许通过地址栏链接打开图片,必须访问index.jsp才能打开图片)
ImgRedirectFilter:
package com.cn.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImgRedirectFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
//
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
String referer = req.getHeader("referer");
if(referer==null || !referer.contains(req.getServerName())){
req.getRequestDispatcher("-----错误页面").forward(request, response);
}else{
chain.doFilter(req, resp);
}
}
public void destroy() {
//
}
}
ImgServlet:
package com.cn.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImgServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
request.getRequestDispatcher("img/"+name).forward(request, response);
}
}
web.xml:
<filter>
<filter-name>ImgRedirectFilter</filter-name>
<filter-class>com.cn.filter.ImgRedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ImgRedirectFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
</filter-mapping>
index.jsp:
<body>
<img src="img/img01.jpg" /><a href="ImgServlet?name=img01.jpg">头像1</a></abbr><br/>
<img src="img/img02.jpg" /><a href="ImgServlet?name=img02.jpg">头像2</a><br/>
<img src="img/img03.jpg" /><a href="ImgServlet?name=img03.jpg">头像3</a><br/>
</body>