【发布时间】:2016-07-16 04:05:18
【问题描述】:
我目前正在为内部工作工具构建一个网页。这是一个示例网站,允许用户登录然后从数据库执行查询。我刚刚实现了一个过滤器,将未登录的用户重定向到登录页面。 doFilter 函数是这样的
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("user") == null) {
// No logged-in user found, so redirect to login page.
response.sendRedirect(request.getContextPath() + "/Login.jsp");
} else {
// Logged-in user found, so just continue request.
chain.doFilter(req, res);
}
}
在我的 web.xml 我有
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>Servlets.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/Home.jsp</url-pattern>
</filter-mapping>
如果我直接访问 Home.jsp,它将重定向到登录页面。但是,一旦登录,用户就会被移动到 Home.jsp 页面,该页面允许用户对数据库执行查询。主页 URL 看起来像
http://localhost:8084/LiveTrades/Home.jsp
但是一旦他们提供输入,它将移动到一个新页面,显示带有 url 字符串的结果,例如
http://localhost:8084/LiveTrades/Request?BIC=cat(假设用户在输入“BIC”字段中输入了“猫”)。
如果用户在未登录时直接输入上面的 url,它会在不应该登录的时候正常处理。我知道这是因为我的过滤器只能从 Home.jsp 页面调用。如何解决此问题以防止带有 Request* 的页面被过滤?
如果有另一个 jsp 页面,比如 Results.jsp,并让处理来自数据库的信息的 Servlet 将数据传递给 Results.jsp,会更容易吗?然后我可以简单地将 Results.jsp 添加到 web.xml。
【问题讨论】: