JForum源码学习研究2-ClickstreamFilter.java

本文介绍了JForum论坛中的ClickstreamFilter过滤器工作原理,该过滤器用于识别访问请求是否来自搜索引擎机器人。通过分析请求头中的User-Agent字段并与预设的bot名单对比,实现对机器人访问的有效识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为我自己习惯研究一个应用从web.xml做为起点,我相信这是个不错的起点。

因此我将从jforum的第一个filter开始研究jforumbiggrin,要是有更好的建议欢迎告诉我哟。万分感谢提出各种意见。

 

net.jforum.util.legacy.clickstream.ClickstreamFilter.java

这是jforum这个论坛在web.xml里面配置的唯一的一个filter,他的作用是用来判断前来访问的请求是否是一个机器人,比如说各种搜索引擎的bot,具体的判断是用BotChecker.java这个类的isBot方法来判断的

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
			ServletException
	{
		// Ensure that filter is only applied once per request.
		if (request.getAttribute(FILTER_APPLIED) == null) {
			request.setAttribute(FILTER_APPLIED, Boolean.TRUE);
			
			String bot = BotChecker.isBot((HttpServletRequest)request);
			
			if (bot != null && log.isDebugEnabled()) {
				log.debug("Found a bot: " + bot);
			}
			
			request.setAttribute(ConfigKeys.IS_BOT, Boolean.valueOf(bot != null));
		}
		
		// Pass the request on
		chain.doFilter(request, response);
	}

 

 

net.jforum.util.legacy.clickstream.BotChecker.java

这是ClickstreamFilter中所使用到的一个工具类,它会获取clickstream-jforum.xml中所有配置的bot名称,通过与request.getHeader("User-Agent"),请求头中的User-Agent的名称进行比较返回出具体的bot类型。

 

net.jforum.util.legacy.clickstream.config.ConfigLoader.java

这是一个用来获取xml中内容的类,BotChecker.java中使用到的clickstream-jforum.xml就是通过它来解析的。ConfigLoader.java的解析方式是通过SAX的方式解析的

private ClickstreamConfig config;

SAXParser parser = SAXParserFactory.newInstance().newSAXParser();

parser.parse(fileInput, new ConfigHandler());

	private class ConfigHandler extends DefaultHandler
	{
		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
		{
			if (qName.equals("bot-host")) {
				config.addBotHost(attributes.getValue("name"));
			}
			else if (qName.equals("bot-agent")) {
				config.addBotAgent(attributes.getValue("name"));
			}
		}
	}

(以上的代码经过我修改,并不是源码,只是为了方便看,方便理解)

 

net.jforum.util.legacy.clickstream.config.ClickstreamConfig.java

这只是个值对象,其中用了两个List用来保存clickstream-jforum.xml中的bot的Host和Agent

 

 

 

在学习了这个Filter后学习到了用SAX的方式在java中解析xml的简单方法。

在每个请求都会在头信息当中都会标注User-Agent,通过IE提交的请求会有IE的User-Agent,FF会有FF的User-Agent,google的机器人在抓取网页信息时提交的请求也会包含它的User-Agent。通过判断它的值可以知道访问者是人还是蜘蛛,还可以知道访问者的浏览器类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值