1 package geekblog.filters;
2
3
4 import java.text.*;
5 import java.util.*;
6 import javax.servlet.*;
7 import javax.servlet.http.*;
8 import geekblog.*;
9
10
11
14 public class ReferralsFilter
15 implements Filter
16 {
17 private FilterConfig config;
18 private Date refDate;
19
20 private static final SimpleDateFormat datef = new SimpleDateFormat("yyyyMMdd");
21
22 public void init(FilterConfig config)
23 {
24 this.config = config;
25 refDate = new Date();
26
27 Set referrers = Collections.synchronizedSet(new HashSet());
28 Map referrersHits = Collections.synchronizedMap(new HashMap());
29 config.getServletContext().setAttribute("referrers", referrers);
30 config.getServletContext().setAttribute("referrersHits", referrersHits);
31 }
32 public void destroy()
33 {
34
35
36 }
37
38
39 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
40 throws ServletException, java.io.IOException
41 {
42 Set referers = (Set)(config.getServletContext().getAttribute("referrers"));
43 Map referersHits = (Map)(config.getServletContext().getAttribute("referrersHits"));
44
45 Date todayDate = new Date();
46 if (!datef.format(todayDate).equals(datef.format(refDate)))
47 {
48 referers.clear();
49 referersHits.clear();
50 refDate = todayDate;
51 }
52
53 String weblogUrl =
54 "http://" + request.getServerName() +
55 (request.getServerPort() != 80 ? ":" + request.getServerPort() : "") +
56 ((HttpServletRequest)request).getContextPath();
57 String referer = ((HttpServletRequest)request).getHeader("Referer");
58
59 if(referer != null &&
60 !referer.startsWith(weblogUrl) &&
61 !referer.startsWith("http://127.0.0.1") &&
62 !referer.startsWith("http://localhost") &&
63 referer.indexOf(":5335") < 0)
64 {
65 referers.add(referer);
66
67 Integer hits = (Integer)referersHits.get(referer);
68 if (hits == null)
69 referersHits.put(referer, new Integer(1));
70 else
71 referersHits.put(referer, new Integer(hits.intValue() + 1));
72 }
73
74 chain.doFilter(request, response);
75 }
76 }
77