2013-03-27 4 views
1

У меня есть шлюз, который перенаправляет пользователей на многие сервлеты, которые обрабатывают задачи.Ограничить доступ к сервлетам

Каждый пользователь должен сначала пройти через сервлет шлюза, а затем перенаправить его на соответствующий сервлет. Я создаю RequestDispatcher и выполняю его функцию forward для правильного сервлета.

проблема заключается в том, что все сервлеты общедоступны, поэтому они могут фактически запускать и выполнять любые сервлеты, которые они хотят.

Я хочу разрешить доступ только к сервлете шлюза и ограничить доступ ко всем остальным. но, конечно, позволить шлюзу пересылать сервлеты.

как это можно сделать?

спасибо!

с использованием Apache Tomcat 7

+0

вы можете использовать фильтры для этой цели – Abubakkar

+0

вы можете предоставить больше информации? – ufk

+0

Это может помочь http://www.oracle.com/technetwork/java/filters-137243.html – Abubakkar

ответ

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); 
     } 
    } 
} 

В вы web.xml, вам необходимо объявить фильтр:

<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>