📄 refererfilter.java
字号:
package org.roller.presentation.filters;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.roller.model.RefererManager;import org.roller.presentation.RollerContext;import org.roller.presentation.RollerRequest;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;/** * Keep track of referers. * * @web.filter name="RefererFilter" * *web.filter-mapping url-pattern="/page/*" * * @author David M. Johnson */public class RefererFilter implements Filter{ private FilterConfig mFilterConfig = null; private static Log mLogger = LogFactory.getFactory().getInstance(RefererFilter.class); /** * destroy */ public void destroy() { } /** * doFilter */ public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; boolean isRefSpammer = false; try { RollerRequest rreq = RollerRequest.getRollerRequest(request); RollerContext rctx = RollerContext.getRollerContext( mFilterConfig.getServletContext()); if ( rreq.getUser() != null ) { String userName = rreq.getUser().getUserName(); // Base page URLs, with and without www. String basePageUrlWWW = rctx.getAbsoluteContextUrl(request)+"/page/"+userName; String basePageUrl = basePageUrlWWW; if ( basePageUrlWWW.startsWith("http://www.") ) { // chop off the http://www. basePageUrl = "http://"+basePageUrlWWW.substring(11); } // Base comment URLs, with and without www. String baseCommentsUrlWWW = rctx.getAbsoluteContextUrl(request)+"/comments/"+userName; String baseCommentsUrl = baseCommentsUrlWWW; if ( baseCommentsUrlWWW.startsWith("http://www.") ) { // chop off the http://www. baseCommentsUrl= "http://"+baseCommentsUrlWWW.substring(11); } // Don't process hits from same user's blogs as referers by // ignoring Don't process referer from pages that start with base URLs. String referer = request.getHeader("Referer"); if ( referer==null || ( !referer.startsWith( basePageUrl ) && !referer.startsWith( basePageUrlWWW ) && !referer.startsWith( baseCommentsUrl ) && !referer.startsWith( baseCommentsUrlWWW ) ) ) { RefererManager refMgr = rreq.getRoller().getRefererManager(); isRefSpammer = refMgr.processRequest(rreq); } else { if (mLogger.isDebugEnabled()) { mLogger.debug("Ignoring referer="+referer); } } } } catch (Exception e) { mLogger.error("Processing referer",e); } if (isRefSpammer) { HttpServletResponse response = (HttpServletResponse)res; response.sendError(HttpServletResponse.SC_FORBIDDEN); } else { chain.doFilter(req, res); } } /** * init */ public void init(FilterConfig filterConfig) throws ServletException { mFilterConfig = filterConfig; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -