加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java会话管理

发布时间:2020-12-15 05:15:54 所属栏目:Java 来源:网络整理
导读:我正在使用一个小型webapp来获得乐趣,目前只使用 Java Servlet.我有两个页面,test1和test2.目前我在test1中创建一个新会话,如下所示: HttpSession session = request.getSession(true); if (session.isNew() == false) { session.invalidate(); session = r
我正在使用一个小型webapp来获得乐趣,目前只使用 Java Servlet.我有两个页面,test1和test2.目前我在test1中创建一个新会话,如下所示:

HttpSession session = request.getSession(true);
    if (session.isNew() == false) {
        session.invalidate();
        session = request.getSession (true);
    }

在test2中,我正在检索会话,如下所示:

HttpSession session = request.getSession(false);
    if (session == null) {
        throw new ServletException ("No session.");
    }

所以问题是如果我先去test2,我总是得到一个有效的会话,因为浏览器会创建一个.我想限制从test1到test2的流程,所以我必须先进入test1.我的计划是最终创建一个创建会话的登录页面,但我在这里看到的问题仍然存在.

我该怎么处理?我希望任何想法都不包括第三方库.我这样做是为了学习练习.

谢谢!

解决方法

这毫无意义.忘记request.getSession(boolean).只需通过request.getSession()获取会话,从不担心nullness / validness.

如果要通过会话属性传递数据,那么只需在test1中执行:

request.getSession().setAttribute("test","foo");

并且在test2中(当然在test1之后的同一会话中请求):

String test = (String) request.getSession().getAttribute("test"); // Returns "foo".

编辑:关于使用会话检查登录用户,只需执行类似登录代码的操作:

User user = userDAO.find(username,password);
if (user != null) {
    request.getSession().setAttribute("user",user);
} else {
    // Show error?
}

然后在Filter中映射到代表限制区域的url模式,只需检查用户是否存在:

if (((HttpServletRequest) request).getSession().getAttribute("user") != null) {
    chain.doFilter(request,response); // Just continue.
} else {
    ((HttpServletResponse) response).sendRedirect("login"); // Not logged-in,redirect to login page.
}

当您注销时,只需从会话中删除用户:

request.getSession().removeAttribute("user");

// Or,more drastically:
request.getSession().invalidate();

或者,您也可以借助web.xml和server.xml中的一些简单条目来查看声明性Container Managed Security.这样您就不必为自己的登录/过滤逻辑烦恼了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读