Jakarta ee servlet jsp中的会话管理问题

Jakarta ee servlet jsp中的会话管理问题,jakarta-ee,session,jsp,Jakarta 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">

我目前正在使用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>
要注销,请执行以下操作:

<a href="/context/controller?action=log-out">Logout</a>
我想知道上面的登录、注销和会话管理逻辑是否正确


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

我可以立即看到一个明显的错误,即每一次未被识别为普通用户的登录尝试都被允许以管理员身份登录。
我严重怀疑这是您想要的,您希望拒绝这些登录并显示错误…
您可能希望设置您的系统,以便管理员也是普通用户。

所以你会得到这样的结果:

如果(login==success)那么如果(login==admin)那么以管理员身份登录,否则以用户身份登录,否则拒绝登录,错误为避免返回是不可选项的。所有浏览器都允许这样做,或者用户可以重新键入URL或搜索历史记录。您必须考虑用户将使用历史记录返回或访问直接页面。因此,在控制器中为此做好准备,并将用户发送到正确的位置。用户万岁!
<a href="/context/controller?action=log-out">Logout</a>
if (action != null && action.equals("log-out")) {
        HttpSession session = request.getSession(false);
        if(session != null){
            session.invalidate();
        }
        request.getRequestDispatcher("index.jsp").forward(
                request, response);
    }