一、实验环境
JDK:13;Tomcat:9.0
二、实验目的
新建两个 web 服务目录 ch3 和 ch4,其中ch3中包含 1.jsp、ch4 中包含 2.jsp、3.jsp以及error.jsp;要求在1.jsp 和 3.jsp 中均有 2.jsp 页面的超链接,点击 3.jsp 中的超链接可以成功访问目标页面,但点击 1.jsp 中的超链接则会返回404错误,不予访问,实现防盗链的设计。
三、实验思想
通过编写判断页面 error.jsp 来判断来访网址是否符合要求,若符合则跳转目标网页,否则进行报错拦截,实现防盗链效果。
四、实验步骤
1.新建服务目录
新建两个 web 服务目录 ch3 和 ch4
![]()
其中,ch3 中新建 1.jsp文件;ch4中新建 2.jsp、3.jsp 以及 error.jsp文件
2.编写 2.jsp 页面(由于是简单的防盗链,对页面设计不做要求)
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<HTML><body bgcolor=#e1e0c7>
<b>您已成功访问目标网页!
</body>
</HTML>
3.编写 1.jsp 页面
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<html><body bgcolor=#e1e0c7>
目标网页访问入口
<a href="http://localhost:8080/ch4/error.jsp">访问</a>
<br>
</body>
</html>
4.编写 3.jsp 页面
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<html><body bgcolor=#e1e0c7>
目标网页访问入口
<a href="error.jsp">访问</a>
<br>
</body>
</html>
唯一要注意的地方是由于两文件的存放目录不同,所以在访问 2.jsp页面时超链接的路径也有所区别
5.编写 error.jsp 页面
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<html><body bgcolor=#e1e0c7>
<%
String a = request.getHeader("referer");
String b=a.substring(0,26);
if(b.equals("http://localhost:8080/ch4/")) {
response.sendRedirect("2.jsp");
}
else {
out.print("404错误");
}
%>
</body>
</html>
页面编写思想:
request.getHeader("referer") 语句获取访问者的整个网址;
substring(0,26)对获取到的网址进行切片,截取网址前缀内容;
if(b.equals("http://localhost:8080/ch4/")) 条件语句判断前缀是否成功对应;
若来自 ch4 目录访问该页面,成功访问。若来自 ch3 的 web 目录下访问该页面,则直接返回“ 404 错误”,不予访问。
6.最终效果演示
注意来访网址不同,效果不同
总结:
这是非常简单的JSP防盗链设计,主要是对JSP内置对象的应用,适合刚刚接触JSP的小白进行参考。如果对你有帮助,请点个赞噢~