【问题标题】:limit access to servlets限制对 servlet 的访问
【发布时间】:2013-03-17 19:49:02
【问题描述】:
我有一个网关 sevlet,它将用户转发到许多处理任务的 servlet。
每个用户必须首先通过网关 servlet,然后将它们转发到正确的 servlet。
我创建了一个 RequestDispatcher 并将其转发功能执行到正确的 servlet。
问题在于所有的 servlet 都是公开可用的,因此用户可以实际去执行他们想要的任何 servlet。
我想只允许对网关 servlet 的访问并限制对所有其他人的访问。但当然要允许网关转发到 servlet。
怎么办?
谢谢!
使用 apache tomcat 7
【问题讨论】:
标签:
java
tomcat
servlets
restriction
【解决方案1】:
使用过滤器检查当前用户是否登录,您需要自己编写方法 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>