javaweb用户登录后跳转界面(我的Java Web之路65 – 实现用户登出/退出功能)

本系列文章旨在记录和总结自己在Java Web开发之路上的知识点、经验、问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人。

提示:尽量使用头条APP阅读,头条网页展示代码会有问题。

目录

介绍原有的用户退出功能思路修改include.jsp添加处理用户退出请求的动作总结

介绍

前面的文章我们实现了租房网平台的用户注册用户登录会话跟踪等功能,本篇文章继续实现用户的登出/退出功能。

原有的用户退出功能

实际上,我们之前的版本中,只要用户登录之后,在每个页面当中已经有退出按钮,如下图:

其对应的代码在我们的 include.jsp 中:

<%@ page language=“java” conte【我.爱.线.报.网.】ntType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%> <%@ page import=“java.util.List” %> <%@ page import=“houserenter.entity.House” %> <!DOCTYPE html> <html> <head> <meta charset=“UTF-8”> <title>租房网</title> </head> <body> <h1>你好,${sessionScope.userName}!欢迎来到租房网! <a href=“login.html”>退出</a></h1> <br><br>

可以看到,这个退出按钮就是一【我.爱.线.报.网.】个普通的链接,直接返回到登录页面而已。那这样有什么不好的地方呢?我们做这样一个实验:

先登录到租房网平台;登录后可以打开其他页面,我这里假设打开某个房源详情页面,其URL是:http://localhost:8080/house-renter/house-details.action?houseId=1然后点击退出,会跳转到登录页面;此时我直接在浏览器的地址栏中重新输入上述URL,可以新开一个浏览器标签页,甚至另外打开一个浏览器进程(不过必须是同一款浏览器,我这里是谷歌浏览器),敲回车;结果是我跳过了登录步骤,直接打开了该房源详情页面。

结论就是这样简单的登录功能很不安全。

究其原因,其实是我们采用【我.爱.线.报.网.】了session进行会话跟踪,只要session不过期,Servlet容器(我们这里是Tomcat)中的该session对象就还有效,绑定到该session对象中的数据也就还有效。

不过,因为HTTP是基于TCP的,所以不同的TCP连接肯定会产生不同的session,大家有兴趣的话可以自行测试一下TCP连接和session之间的关系。

思路

所以,我们的用户退出功能必须是这样的:

用户点击退出按钮;Servlet容器必须感知到用户的退出;Servlet容器销毁该用户的session。

修改include.jsp

Servlet容器感知用户的退出很简单,只要发送一个请求给Servlet容器即可。

所以我们设计【我.爱.线.报.网.】一个用户退出的动作,让上面的退出按钮指向该动作:

<h1>你好,${sessionScope.userName}!欢迎来到租房网! <a href=“logout.action”>退出</a></h1>

添加处理用户退出请求的动作

我们可以在HouseRenterController中添加处理用户退出请求的动作:

@GetMapping(“/logout.action”) public ModelAndView getLogout(HttpSession session) { System.out.println(“session: “ + session); System.out.printl【我.爱.线.报.网.】n(“session id: “ + session.getId()); session.invalidate(); ModelAndView mv = new ModelAndView(); mv.setViewName(“redirect:login.html”); return mv; }

重点关注的是,我们调用了HttpSession的invalidate()方法,这样我们就销毁了该session。

我们是如何得知该方法的呢?我们可以充分利用IDE的自动补足功能,然后查看每一个方法的javadoc:

可以发现invalidate()方法就是用来使此session【我.爱.线.报.网.】无效,并解除绑定到它的任何对象。

总结

大家可以自行验证一下,经过这样改造后,上述问题得到解决。

调用HttpSession的invalidate()方法可以使会话无效。 给力项目吾爱网创会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:1059819594 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

中国银行atm机行内转账多久到账(中国银行申请ATM机选址专利,可行性较高)

2024-12-16 10:00:15

行业资讯

填写发票抬头什么意思(发票抬头是什么意思 常见写法有哪些)

2024-12-16 10:23:11

近期部分课程提取码提示错误的,一般为8888或9999
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索