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));
        }
    }
  • 相关阅读:
    hdoj2187:悼念512汶川大地震遇难同胞 (贪心)
    2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性
    2.0外观之样式, 模板, 视觉状态和视觉状态管理器
    2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle
    2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton
    2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    2.0图形之基类System.Windows.Shapes.Shape
    2.0交互之鼠标事件和键盘事件
    2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
    2.0交互之InkPresenter(涂鸦板)
  • 原文地址:https://www.cnblogs.com/vaer/p/3925020.html
Copyright © 2011-2022 走看看