程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java防盜鏈在報表中的運用實例(推舉)

java防盜鏈在報表中的運用實例(推舉)

編輯:關於JAVA

java防盜鏈在報表中的運用實例(推舉)。本站提示廣大學習愛好者:(java防盜鏈在報表中的運用實例(推舉))文章只能為提供參考,不一定能成為您想要的結果。以下是java防盜鏈在報表中的運用實例(推舉)正文


明天我們來聊聊Java防盜鏈,多說無用,直接上運用案例。

這裡所用的對象是報表軟件FineReport,搭配有決議計劃體系(一個web前端展現體系,重要用於權限掌握),可以采取java防盜鏈的方法來完成頁面權限。

閱讀器中直接輸出報表URL的時刻,它的頭文件是空的,是以,可以在拜訪的時刻做兩個斷定:頭文件能否為空和以甚麼頁面停止跳轉,假如不相符跳到毛病頁面便可。

甚麼是Referer?

這裡的 Referer 指的是HTTP頭部的一個字段,也稱為HTTP起源地址(HTTP Referer),用來表現從哪兒鏈接到今朝的網頁,采取的格局是URL。換句話說,借著 HTTP Referer 頭部網頁可以檢討訪客從哪裡而來,這也常被用來對於捏造的跨網站要求。

甚麼是空Referer,甚麼時刻會湧現空Referer?

起首,我們對空Referer的界說為,Referer 頭部的內容為空,或許,一個HTTP要求中基本不包括Referer頭部。

那末甚麼時刻HTTP要求會不包括Referer字段呢?依據Referer的界說,它的感化是指導一個要求是從哪裡鏈接過去,那末當一個要求其實不是由鏈接觸發發生的,那末天然也就不須要指定這個要求的鏈接起源。

好比,直接在閱讀器的地址欄中輸出一個資本的URL地址,那末這類要求是不會包括Referer字段的,由於這是一個“平空發生”的HTTP要求,其實不是從一個處所鏈接曩昔的。

在防盜鏈設置中,許可空Referer和不許可空Referer有甚麼差別?

在防盜鏈中,假如許可包括空的Referer,那末經由過程閱讀器地址欄直接拜訪該資本URL是可以拜訪到的;

但假如不許可包括空的Referer,那末經由過程閱讀器直接拜訪也是被制止的。

操作步調

1、添加class文件

編寫一個類文件,用來斷定頭文件能否為空,代碼以下:

package com.fr.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Dodo implements Filter {
  public void destroy() {
    // TODO Auto-generated method stub

  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

  throws IOException, ServletException {
  HttpServletRequest req = (HttpServletRequest) request;
  HttpServletResponse resp = (HttpServletResponse) response;
  String referer = req.getHeader("referer");
  //上面的IP地址是正常頁面要求
  if(null != referer && (referer.trim().startsWith("http://localhost:8033")||referer.trim().startsWith("http://www.finereporthelp.com/test/hello.html"))){
     System.out.println("正常頁面要求"+referer);
     chain.doFilter(req, resp);
  //上面的就是湧現不是正常頁面要求的時刻跳轉
  }else{
     System.out.println("盜鏈"+referer);
     req.getRequestDispatcher("/LdapLogin.jsp").forward(req, resp);
  }
}
  public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub

  }
}

將Dodo.java編譯成class文件,並放在%TOMCAT_HOME%\WebReport\WEB-INF\classes\com\fr\test目次下。

2、修正web.xml文件

翻開%TOMCAT_HOME%\webapps\WebReport\WEB-INF下的web.xml文件,設置裝備擺設一個過濾filter,在湧現ReportServer的時刻履行過濾,代碼以下:


<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.fr.test.Dodo</filter-class></filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/ReportServer</url-pattern>
</filter-mapping>

兩步便可以弄定,假如屬於盜鏈,則跳轉至上述的LdapLogin毛病頁面,這裡沒有LdapLoign頁面,所以直接跳轉404。假如還想完成數據權限,則可以經由過程單點登錄或許session注入的方法。

後果測試

預備兩個html文件

假定hello.html是准確的網址

<html>
<body>
<p>測試</p>

<a href="http://localhost:8033/WebReport/ReportServer?reportlet=demo%2Fnewchart%2Fothers%2FLogarithmic_axis.cpt&op=write">防盜鏈測試</a>
</body>
<html>

假定steal.html是盜鏈的網址

<html>
<body>
<p>測試,毛病的鏈接地址</p>

<a href="http://localhost:8033/WebReport/ReportServer?reportlet=demo%2Fnewchart%2Fothers%2FLogarithmic_axis.cpt&op=write">防盜鏈測試</a>
</body>
</html>

情形一

經由過程hello.html跳轉,跳轉鏈接准確,即referer不為空且准確

情形二

經由過程steal.html跳轉,跳轉鏈接毛病,即referer不為空且毛病

情形三

直接拜訪URL地址,即referer為空

以上這篇java防盜鏈在報表中的運用實例(推舉)就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved