報表單獨部署時跨應用訪問報表安全控制

2021-07-24 23:21:34 字數 1847 閱讀 3084

潤幹報表與使用者的系統整合,一般有兩種方案。一是整合到使用者系統中。二是將潤幹單獨部署到乙個應用下。

兩種方案各有利弊:第一種方案對於安全性等方面可以統一管理,但是報表本身如果資料量大併發大造成的壓力會直接影響使用者自己的系統。第二種方案在報表伺服器承受壓力過大資料量過大的時候,不會影響到使用者本身的系統,也就是說就算報表伺服器壓力飽和進入等待狀態,使用者的系統也可以正常的使用,眾所周知潤幹報表的呼叫一般直接通過url的方式進行呼叫,那麼第二種方案中的url就無法被使用者系統所控制,造成了一定的安全隱患。

下面就介紹幾種解決此類問題的方案之中的一種:通過ip在過濾器中判斷許可權。

案例場景:

通過使用者系統訪問一張報表時,當然會帶著一些使用者資訊或是其他引數傳遞過來。如果這時這個url被其他人複製或者記住,拿到其他客戶機上直接訪問,由於採用的是第二種方案,使用者系統並不能控制,就會導致資訊的洩漏。

解決思路:

這時我們可以採取從使用者系統獲取客戶端ip然後拼成訪問報表的引數,傳遞到報表伺服器,然後在報表伺服器中對該ip是否有許可權開啟這張報表進行判斷,如果有許可權繼續訪問,如果沒有許可權跳轉到錯誤頁面或者使用者登陸頁面等。

實現方法:

一、首先搭建報表伺服器,這裡以潤幹自帶demo為例。

正常訪問報表url為:

這個url就當做使用者系統請求一張報表的url,這時可以在這個url後加上登入使用者系統的ip,假設使用者以192.168.0.58這個ip登陸的,那麼url為:&ipvalue=192.168.0.58

二、寫乙個filter

在dofilter中獲取url中帶的的引數以及客戶端的ip,然後進行比較

public voiddofilter(servletrequest request, servletresponse response,

filterchain filterchain)throwsioexception, servletexception

if(ip ==null|| ip.length() == 0 || 「unknown」.equalsignorecase(ip))

if(ip ==null|| ip.length() == 0 || 「unknown」.equalsignorecase(ip))

if(ip ==null|| ip.length() == 0 || 「unknown」.equalsignorecase(ip))

if(ip ==null|| ip.length() == 0 || 「unknown」.equalsignorecase(ip))

// 根據獲取的客戶端ip,進行判斷,返回相關結果為isvalid=true

booleanisvalid =false;

string ipvalue = request.getparameter(「ipvalue」);

if(ip.equals(ipvalue))

// 如果滿足條件允許登入,否則調準

if(isvalid)else

三、在web.xml中加入filter配置

ipfilter

com.runqian.filter.ipfilter

ipfilter

/*然後重啟服務,如果將url拷貝到其他ip的客戶端訪問,救活跳轉到相應的錯誤頁面

報表部署 via VS2005

1部署 上傳 報表 23更新 上傳 報表 4報表顯示與隱藏 2011年11 月28日星期一 1 右擊報表專案,選擇 屬性 2 在 屬性 視窗中設定 不覆蓋 datasource 通常在datasource 已經建立好後使用。true 覆蓋datasource 若不存在,就建立此 datasource...

TFS 處理報表時出錯

1.現象 訪問tfs指定專案的專案門戶時 sharepoint 站點 網頁中的表報部分報錯 錯誤資訊 處理報表時出錯。rsprocessingaborted 獲取聯機幫助 對資料集 iterationparam 執行查詢失敗。rserrorexecutingcommand 獲取聯機幫助 team s...

前端專案單獨部署nginx伺服器

最近公司有新專案計畫做前後端分離部署,讓前端單獨部署在一台aws的ec2伺服器,記錄一下部署的過程,免得下次又得查閱資料 aws ec2伺服器搭建nginx前端伺服器 nginx前端專案預設存放目錄 usr share nginx html,不想放這裡就在自定義的conf檔案修改專案路徑 這裡的檔案...