zoukankan      html  css  js  c++  java
  • Servlet 1 http请求,响应消息头,状态码 盗链机制

    目录:

    设置响应消息头:refresh,实现5秒后 自动跳转 index.html

    设置响应消息头状态码302,实现请求 重定向

    判断请求消息头,referer,实现防盗链

    利用URL对象,伪造referer消息头,破解防盗链机制

    *注:Servlet在web.xml文件中有配置,注意查看

    设置响应消息头:refresh,实现5秒后 自动跳转 index.html

    package cn.itcast.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
     * 5秒后 自动跳转 index.html
     * @author seawind
     *
     */
    public class RefreshServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 设置refresh
            response.setHeader("refresh", "5;url=index.html");
            
            // 显示提示信息
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("网页会在5秒后 跳转 index.html");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    设置响应消息头状态码302,实现请求 重定向

    package cn.itcast.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
     * 完成请求 重定向
     * @author seawind
     *
     */
    public class RedirectServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 设置状态码 302 
            response.setStatus(302);
            // 指定 重定向页面地址
            response.setHeader("Location", "img.html");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    判断请求消息头,referer,实现防盗链

    html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <a href="referer">特价商品</a>
    </body>
    </html>

    Servlet

    package cn.itcast.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
     * 通过/referer 访问程序
     * @author seawind
     *
     */
    public class RefererServlet extends HttpServlet {
    
        // 处理get方式请求
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 判断请求中referer是否存在,有效  --- 防止盗链
            String referer = request.getHeader("referer");
            if(referer!=null && referer.equals("http://localhost/day4/index.html")){
                // 有效
                response.setContentType("text/html;charset=gbk");
                response.getWriter().println("笔记本1000元");
            }else{
                // 无效
                response.setContentType("text/html;charset=gbk");
                response.getWriter().println("盗链真无耻!");
            }
        }
    
        // 处理post方式请求
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    利用URL对象,伪造referer消息头,破解防盗链机制

    package cn.itcast.client;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class URLClient {
        public static void main(String[] args) throws IOException {
            // 建立访问目标URL对象
            URL url = new URL("http://localhost/day4/referer");
            // 建立目标URL连接
            URLConnection urlConnection = url.openConnection();
            // 伪造referer
            urlConnection.addRequestProperty("referer", "http://localhost/day4/index.html");
            
            // 抓取响应内容
            byte[] buf = new byte[8192];
            int len = urlConnection.getInputStream().read(buf);
            
            // 输出内容
            System.out.println(new String(buf,0,len));
        }
    }
  • 相关阅读:
    centos7/RHEL7安装LibreOffice
    CentOS7开机启动管理systemd简介及使用
    Vim使用技巧
    16_用LVM扩展xfs文件系统(当分区空间不够时)
    15_RHEL7挂载NTFS分区
    14_RHEL7安装mplayer
    polyfill-eventsource added missing EventSource to window ie浏览器 解决方案
    关于vue,webpack 中 “exports is not defined”报错
    2018 vue前端面试题
    Error: No PostCSS Config found in... 报错 踩坑记
  • 原文地址:https://www.cnblogs.com/vaer/p/3925020.html
Copyright © 2011-2022 走看看