身份验证过滤器,以防止用户登录后进入登录页面

时间:2011-08-19 13:18:11

标签: java jsp authentication servlets servlet-filters

如果他已登录

,我想阻止用户返回登录页面
 if (req.getRequestURI().indexOf("Login.jsp") != -1 || req.getRequestURI().indexOf("LoginE.jsp") != -1) {

                   System.out.println("trtying to go to login");

                 //what should I write here to redirect the user to the page he was already in ??
             }

2 个答案:

答案 0 :(得分:1)

只需检查用户是否已登录,然后重定向到所需的目标页面。假设user表示您从会话中抓取的登录用户,这是一个示例:

if (req.getRequestURI().indexOf("Login.jsp") != -1 || req.getRequestURI().indexOf("LoginE.jsp") != -1) {
    if (user != null) {
        response.sendRedirect("already-logged-in.jsp");
        return;
    }
}

该页面看起来像

<p>You appears to be already logged in. If you want to login as someone else, 
   please use the <a href="logout">logout</a> link to logout, or navigate to a
   different page by menu on the left hand side.</p>

当用户已经登录时,我也会完全隐藏登录页面的链接,只是为了防止用户意外地点击该内容或其他内容。

<c:if test="${empty user}">
    <a href="Login.jsp">Login</a>
</c:if>

对具体问题

无关Login.jspLoginE.jsp有什么问题?是一个用母语,另一个用英语吗?您可能希望在JSTL本地化设施上投入一些时间。 How to internationalize a Java web application?

答案 1 :(得分:0)

根据用户访问Login.jsp请求的方式,您可能丢失了有关上一个请求的信息。您是否尝试查看“Referer”标题以查看上一页是否在那里?您可以使用req.getHeaders("Referer");

如果没有引荐来源信息,则必须为用户管理一个Session属性,称为“lastRequestURL”。这样您就可以使用以下代码在上面的代码中检索它:req.getSession().getAttribute("lastRequestURL")并将用户重定向到该值。

相关问题