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防盜鏈在報表中的運用實例(推舉)就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。