关于servlet jsp中会话管理的问题

时间:2014-05-22 08:53:29

标签: java-ee session jsp

我目前正在使用servlet和JSP在J2EE中开发一个中级Web应用程序。它就像一个内容管理系统。我的网站根据我的需求工作非常相似,但在J2EE中使用 MVC 最佳实践和不良实践有一些问题

用户登录应用的代码为:

<c:choose>
    <c:when test="${not empty sessionScope.admin}">
    <a href="/context/controller?action=add-content"> + Add a Content</a>
    </c:when>
    <c:otherwise>
    <a href="/context/controller?action=log-in"> Admin Login</a>
    </c:otherwise>
</c:choose>

控制器servlet中的Java代码是:

if (userDAO.isUser(request.getParameter("uname"), request.getParameter("upass"))) {             
    request.getSession().setAttribute("admin", request.getParameter("uname"));  
    request.getRequestDispatcher("/admin.jsp").forward(request, response);
} else {
    request.getSession().setAttribute("admin", "");
    request.getRequestDispatcher("/content.jsp").forward(request, response);
}

注销:

<a href="/context/controller?action=log-out">Logout</a>

控制器servlet中的Java代码是:

if (action != null && action.equals("log-out")) {
        HttpSession session = request.getSession(false);
        if(session != null){
            session.invalidate();
        }
        request.getRequestDispatcher("index.jsp").forward(
                request, response);
    }

我想知道登录,注销和会话管理的逻辑是否正确?

我也无法阻止用户在注销后返回安全页面,我该如何设置?

1 个答案:

答案 0 :(得分:0)

我可以立即看到的一个明显的错误是,每次不被识别为普通用户的登录尝试都允许以管理员身份登录。
我严重怀疑这是你想要的,你希望这些登录被拒绝并显示错误...
你可能想要设置你的系统,所以管理员也是普通用户
所以你会得到类似的东西:
if(login == success)then if(login == admin)then login_as_admin else login_as_user else deny_login_with_error