请求头referer的作用是记录了上一个请求页面的URL,比如第一次我请求了页面A,当我第二次请求页面B的时候,第二次请求的头信息中referer属性的值就是A页面的URL。
这个有什么用呢?可以做一个简单的登录拦截验证,就是你必须从我指定的页面才能进入首页,从其他的页面进入或者直接通过URL访问都会被拦截。这个后面主要是通过过滤器来实现,主要目的是为了练习一下这个头信息的用法。
servlet代码@WebServlet("/demo12")
public class ServletDemo12 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String userName = req.getParameter("username");
String password = req.getParameter("password");
String url = req.getHeader("referer");
if(url == null || !url.contains("http://localhost:8080/servlets/login.html")){
System.out.println("未知位置访问,已跳转到标准登录页面");
resp.setStatus(302);
resp.setHeader("location","/servlets/login.html");
}
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.write("welcome!" + userName);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
登录页面代码(瞎写的)
登录界面
登录
body{
background: #acb6e5;
background: -webkit-linear-gradient(to right, #86fde8, #acb6e5);
background: linear-gradient(to right, #86fde8, #acb6e5);
}
#heading{
position: absolute;
top: 10%;
}
#container{
text-align: center;
box-sizing: border-box;
border-radius: 30px;
width: 30%;
height: 60%;
margin: auto;
position: absolute;
top:50%;
left: 50%;
transform: translate(-50%,-50%);
padding: 100px 0;
background: #E55D87;
background: -webkit-linear-gradient(to right, #5FC3E4, #E55D87);
background: linear-gradient(to right, #5FC3E4, #E55D87);
}
.input{
display: block;
width: 70%;
height: 40px;
background: transparent;
border: white solid 1px;
border-radius: 3px;
margin: auto auto 40px;
}
#container form input:last-child:hover{
background-color: white;
opacity: 0.5;
}
.input:focus{
outline-color: orange;
outline-width: 1px;
}
测试结果
从login.html页面可以正常访问
从其他页面或者导航栏直接访问servlet12就会重定向到login.html页面



