簡體   English   中英

如何使Servlet識別調用方JSP和會話

[英]How to make Servlet recognize caller JSP and session

我正在使用servlet構建一個簡單的WebApplication。 我是一個初學者,但已嘗試學習大多數此技術。 我無法解決某些問題。 我的servlet之一是有用的BalusC FileServlet

http://balusc.blogspot.mx/2007/07/fileservlet.html

它使用所需的文件(干凈)來響應GET請求。

我使用此FileServlet為Dygraph提供CSV文件

http://dygraphs.com/

我有兩種類型的用戶:來賓和管理員。 來賓應該可以看到圖表,但不能下載CSV文件。 管理員應該能夠同時做到。

fileServlet以以下格式響應URL模式:file / *(*是文件名),這非常方便,因為Dygraph讀取URL中指定的文件。

在此web應用程序中內置了一個loginServlet,如果用戶只是復制粘貼Dygraph給出的URL,我希望能夠避免fileservlet提供文件。 FileServlet已經能夠從該會話中獲取會話和登錄用戶,但是我不知道如何檢測調用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”

因此Dygraph可以很好地加載文件並繪制線條。

但是,我希望FileServlet能夠檢測到用戶何時在ContextName之后復制粘貼此URL並將其阻止,因此只有Dygraph可以下載該文件。

例如,如果用戶在瀏覽器中鍵入:

http://localhost:8080/MyWebApp/file/2012-04-20_1.csv

它不應該能夠下載它。 只有管​​理員應該能夠。

現在,我在想也許應該實現FileServlet,以便必須使用其他URL模式或POST方法來調用它,以便簡單的用戶copy-pasta無法通過“ origining-JSP”檢查。

順便說一句,我是從嘗試Struts2回來的,對於該應用程序來說這太復雜了。 為了方便和簡化簡單的servlet和JSP的開發,我放棄了它。

使用過濾器檢查用戶角色。 也就是說,在需要采取任何重要措施來檢查用戶是否有權執行此操作之前。 這是任務servlet過濾器。

您必須在擴展javax.servlet.Filter的類中實現doFilter()方法,如下所示:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws   IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;

    HttpSession session = req.getSession();

    String currentRole = (String) session.getAttribute("userRole");

    if ("admin".equals(currentRole)) {
         successRedirect(); 
    } else {
         failRedirect();
    }
    chain.doFilter(request, response);
}

並且不要忘記將此過濾器映射到web.xml文件中所需的地址:

<filter>
    <filter-name>CheckRightAccessFilter</filter-name>
    <filter-class>yourproject.CheckRightAccessFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CheckRightAccessFilter</filter-name>
    <url-pattern>*.csv</url-pattern>
</filter-mapping>

使用servlet篩選器檢查誰被替換的url,並根據會話對象識別用戶角色。 如果找到授權用戶,則可以重定向到下載頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM