2013-03-27 211 views
1

我有一個網關sevlet,可以將用戶轉發到許多處理任務的servlet。限制訪問servlets

每個用戶必須首先通過網關servlet,然後將它們轉發到適當的servlet。 我創建了一個RequestDispatcher並將它的forward函數執行到適當的servlet。

問題是所有的servlet都是公開的,所以他們可以真正去執行他們想要的servlet。

我想只允許訪問網關servlet並限制訪問所有其他人。但當然要允許網關轉發到servlet。

怎麼辦?

謝謝!

使用Apache Tomcat 7

+0

你可以使用過濾器來達到這個目的 – Abubakkar 2013-03-27 16:18:37

+0

你能提供更多的信息嗎? – ufk 2013-03-27 16:23:49

+0

這可以幫助http://www.oracle.com/technetwork/java/filters-137243.html – Abubakkar 2013-03-27 16:27:06

回答

4

使用過濾器來檢查當前用戶登錄,則需要通過檢查會話寫方法userIsLoggedIn()自己,屬性:

public class LoginFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse res, 
     FilterChain chain) throws IOException, ServletException { 

     if (userIsLoggedIn()) { 

     //process request normally, pass up the filter chain to the servlet: 
     chain.doFilter(req, res); 

     } else { 

     //go to login screen instead 
     RequestDispatcher dispatcher = getRequestDispatcher("login"); 
     dispatcher.forward(request, response); 
     } 
    } 
} 

在你需要聲明你的過濾器:

<filter> 
    <filter-name>loginFilter</filter-name> 
    <filter-class> 
    com.foo.LoginFilter 
    </filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>loginFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>