我目前正在使用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);
}
我想知道登录,注销和会话管理的逻辑是否正确?
我也无法阻止用户在注销后返回安全页面,我该如何设置?
答案 0 :(得分:0)
我可以立即看到的一个明显的错误是,每次不被识别为普通用户的登录尝试都允许以管理员身份登录。
我严重怀疑这是你想要的,你希望这些登录被拒绝并显示错误...
你可能想要设置你的系统,所以管理员也是普通用户
所以你会得到类似的东西:
if(login == success)then if(login == admin)then login_as_admin else login_as_user else deny_login_with_error