开发防盗链标签,原理不难,就是得到http请求头中的“referer”字段就可以知道用户是从哪里点击到我们网站的,如果用户不是从我们网站点击过来的,或者直接访问我们的jsp页面,那么我们可以让用户首先重定向到首页,然后从首页中点击它所要访问的内容。
package com.shizhan;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class Referer extends SimpleTagSupport{
private String site;
private String path;
public void setSite(String site) {
this.site = site;
}
public void setPath(String path) {
this.path = path;
}
@Override
public void doTag() throws JspException, IOException {
PageContext p=(PageContext) this.getJspContext();
HttpServletRequest h=(HttpServletRequest) p.getRequest();
String from=h.getHeader("referer");
HttpServletResponse hr=(HttpServletResponse) p.getResponse();
//判断是不是重我们网站点击过来访问的
if(from==null || !from.startsWith(site))
{
//分析path的格式,以方便我们确定重定向地址的格式
if(path.startsWith(h.getContextPath()))
{
hr.sendRedirect(path);
}
else if(path.startsWith("/"))
{
hr.sendRedirect(h.getContextPath()+path);
}
else
{
hr.sendRedirect(h.getContextPath()+"/"+path);
}
//不继续直接下面的jsp代码
throw new SkipPageException();
}
else
{
//继续直接。。。。
}
super.doTag();
}
}
tld配置文件
<tag>
<description>referrer</description>
<name>ref</name>
<tag-class>com.shizhan.Referer</tag-class>
<body-content>empty</body-content>
<attribute>
<name> site </name>
<required> true </required>
<rtexprvalue> true </rtexprvalue>
</attribute>
<attribute>
<name> path </name>
<required> true </required>
<rtexprvalue> true </rtexprvalue>
</attribute>
</tag>