java - servlet jsp中的 session 管理

标签 java jsp servlets

我目前正在使用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);
    }


我想知道以上用于登录,注销和会话管理的逻辑是正确的吗?

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

最佳答案

使用此博客文章,您可以了解j2ee中的会话管理。

http://thisara.me/2015/12/21/session-management-in-j2ee/

为了避免在注销后返回,您需要使用jsp上的session.invalidate()或HttpServlet上的request.getSession()。invalidate()使当前会话无效。

此外,您可以尝试添加NoCache过滤器,您将需要在其中创建以下过滤器,并在web.xml上配置过滤器。

@WebFilter
public class NoCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");  // HTTP 1.1
        response.setHeader("Pragma", "no-cache");  // HTTP 1.0
        response.setDateHeader("Expires", 0);  // Proxies.

        chain.doFilter(req, res);
    }
}

关于java - servlet jsp中的 session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23802410/

相关文章:

java - 需要捕获代理后面的客户端ip地址

java - Python Azure 函数中的 Tika

html - 在显示 JSP 之前调用 servlet 的 doGet()

java - 为什么我需要一个 HttpSession 来获取 ServletContext?

java - response.sendRedirect 不保留请求属性?

java - @Inject 在 Struts 2 中的 Jersey REST web 服务中不起作用

java - 如何为ANTLR指定目标包?

jsp - JSP中如何分割字符串

Java - MySql 存储过程 "No data - zero rows fetched, selected, or processed"

java - Spring MVC 执行顺序 : Filter and Interceptor