我有一个网关sevlet,可以将用户转发给许多处理任务的servlet。
每个用户必须先通过网关servlet然后将它们转发到正确的servlet。 我创建一个RequestDispatcher并将它的正向函数执行到正确的servlet。
问题是所有servlet都是公开可用的,因此用户实际上可以去执行他们想要的任何servlet。
我想只允许访问网关servlet并限制对所有其他servlet的访问。但当然要允许网关转发到servlet。
怎么做?
谢谢你!使用apache tomcat 7
答案 0 :(得分: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>