添加简单防盗链操作即限制引用页,作用原理:获取用户提交信息的网站地址,然后和真正的服务端的地址相比较,如果一致则表明是站内提交,或者为自己信任的站点提交,否则视为盗链。
步骤:定义标签处理类;定义描述文件;在内容页面使用标签
部分代码:
定义标签处理类
PageContext pageContext = (PageContext) this.getJspContext();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
//通过头信息得到站点信息
String referer = request.getHeader("referer");
System.out.println(referer);
/*防盗链的具体操作处理类
* 判断是否为盗链
* 如果访问站点为空或访问站点不是site开头的*/
if(referer == null || !referer.startsWith(site)){
//如果是盗链,根据page属性值,将盗链重定向指向访问被盗链内容的正确页面
String contextPath = request.getContextPath();
System.out.print(contextPath);
if(page.startsWith(contextPath)){
response.sendRedirect(page);
}else if(page.startsWith("/")){
response.sendRedirect(contextPath+page);
}else{
response.sendRedirect(contextPath+"/"+page);
}
//抛出异常
throw new SkipPageException();
}
定义描述文件:
<tag>
<description>referer demo</description>
<name>referer</name>
<tag-class>cn.csdn.web.Tag.Referer</tag-class>
<body-content>empty</body-content>
<attribute>
<name>site</name>
<required>true</required>
<!-- 指定属性值是否在JSP运行时自动产生,true为自动产生,false为不自动产生 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>page</name>
<required>true</required>
<!-- 指定属性值是否在JSP运行时自动产生,true为自动产生,false为不自动产生 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
在内容页面使用标签:
<%@ taglib uri="http://cn.csdn.web.tag" prefix="tag"%>
<!-- 控制整个页面时无标签体,是单个标签声明 -->
<!--site:受信任站点,只允许次站点的请求 page:正确的链接页面,发现盗链后将其自动转入此页面-->
<tag:referer site="http://localhost:8080/20111109" page="index.jsp"/>