2013-03-27 139 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>