我正在使用servlet構建一個簡單的WebApplication。我是一名初學者,但已經試圖學習這項技術的大部分。有什麼我不明白。我的一個的servlet是有用BalusC FileServlet如何讓Servlet識別調用者JSP和會話
http://balusc.blogspot.mx/2007/07/fileservlet.html
它響應要獲得所需要的文件,非常乾淨的請求。
我用這個FileServlet服務CSV文件的Dygraph
http://dygraphs.com/
我有兩種類型的用戶:來賓和管理員。客人應該能夠看到圖表但不能下載CSV文件。管理員應該能夠做到這一點。
fileServlet對URL模式的響應如下:file/*(*是文件名),它非常方便,因爲Dygraph讀取URL中指定的文件。
在這個webapp中有一個loginServlet,我希望能夠避免fileservlet給出文件,如果用戶只是複製粘貼給Dygraph的URL。 FileServlet已經能夠從該會話中獲取會話和loggeduser,但我不知道如何檢測到什麼是調用GET方法的頁面。我希望fileservlet只在JSP代碼中調用時才提供文件,而不是從瀏覽器的地址欄中調用。
讓我解釋一下:
我的意思是 - 作爲一個來賓用戶下面的JavaScript代碼應顯示圖形(該FileServlet提供文件)
<div id="graphdiv2" style="width:640px; height:480px;">
<script type="text/javascript">
g2 = new Dygraph(
document.getElementById("graphdiv2"),
"${messages.rutacsv}", // path to CSV file
{
rollPeriod: 10,
showRoller: true
}
);
</script>
</div>
變量: 「$ {} messages.rutacsv」被由servlet替代的東西,看起來像這樣:
「文件/ 2012-04-20_1.csv」
因此T他Dygraph很好地加載文件並繪製線條。
但是,我希望FileServlet能夠檢測到用戶在ContextName後複製此URL並將其阻止,因此只有Dygraph可以下載該文件。
例如,如果在其瀏覽器的用戶類型:
http://localhost:8080/MyWebApp/file/2012-04-20_1.csv
應該無法下載。只有管理員應該能夠。
現在,我想我應該實現FileServlet,因此必須使用另一個URL模式或使用POST方法調用,以便簡單的用戶副本 - 麪食無法越過「原始JSP」檢查。
順便說一句,我回來嘗試使用Struts2,這對於這個應用來說太複雜了。爲了方便和簡單的servlet和JSP,我放棄了它。
看起來像你需要的是Servlet過濾器,它檢查URL和當前用戶角色,並允許直接下載管理員。對於其他請求只返回404或發送重定向到JSP。 –
好的,但我不認爲我已經實現了用戶角色。我只在會話上執行session.setAttribute(「logonuser」,「用戶名」)。我想我必須做更多的工作......不是嗎? –
這取決於你的要求。如果任何登錄用戶可以直接下載,那麼你可以檢查會話中是否存在'logonuser'屬性,否則重定向到登錄servlet。 –