Loading... ## 当当当: 这几天用学的javaweb开发了一个小应用,可以免费播放vip视频 [传送阵](https://videovip.bdmcom.cn/) ## 保证登录状态 ### 如何实现保持登录状态呢? <div class="tip inlineBlock success"> 因为vue有个自带的 `munted()`方法,没当我们页面加载完成时,就会执行此方法,我们登录成功后,可以利用session.setAttribute()存储一个user对象,每次加载页面,前端都会向后端请求这个user对象,当这个user对象不为null时,证明我们登录成功,为了保持前端的登录状态,我们在请求这个user对象的同时,往前端也响应一个对象,当这个对象不为null,前端接受这个数据并且存储在本地,前端通过获取这个由后端传来的user对象,来保持前端页面对用户的开放。 </div> ### 后端核心代码: #### 当用户名和密码填写正确,设置session ```java // 设置session 如果已登录,返回用户id,用户名,用户是否为管理员给前端 final HttpSession session = request.getSession(); session.setAttribute("userid", selectUser.getId()); session.setAttribute("username", selectUser.getName()); session.setAttribute("admin",selectUser.getAdmin()); ``` #### 请求接口 ```java public void status(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final HttpSession session = request.getSession(); final Object userid = session.getAttribute("userid"); final Object username = session.getAttribute("username"); final Object admin = session.getAttribute("admin"); if(userid != null && username != null && admin != null){ // 已登录 返回用户名 和 用户id final Login login = new Login("1", (String) admin, (Integer) userid, (String) username); final String jsonString = JSON.toJSONString(login); // 如果数据中存在中文,需要设置编码 response.setContentType("text/json;charset=utf-8"); response.getWriter().write(jsonString); }else{ // 未登录 response.getWriter().write("noSuccess"); } } ``` ### 前端核心代码: ```java // 保持登录状态 axios({ method: 'get', url: 'http://localhost/user/status' }).then((res) => { if (res.data == "noSuccess") { this.state = 0 } else { this.state = 1 this.userData.admin = res.data.success this.userData.name = res.data.name this.userData.admin = res.data.admin this.userData.id = res.data.id this.getUrlAll() } }) ``` ## 如何退出登录状态呢? <div class="tip inlineBlock success"> 当我们想要退出登录状态的时候,我们只要往后端请求销毁session即可,这样即使前端往后端请求user对象,此时因为session已经销毁,值为null,所以前端接受到后端接口返回来的数据为空,只要刷新页面,数据就没有了。 </div> ### 后端核心代码: #### 请求接口 ```java public void signOut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final HttpSession session = request.getSession(); // 移除session user这个属性 session.removeAttribute("user"); // 销毁跟用户关联的session session.invalidate(); response.setContentType("text/json;charset=utf-8"); response.getWriter().write("success"); } ``` ### 前端核心代码: ```java // 退出登录 signOut() { axios({ method: 'get', url: 'http://localhost/user/signOut' }).then((res) => { console.log("数据" + res.data) if (res.data == "success") { console.log("退出成功!") window.location.href = "http://localhost/index.html" } }) }, ``` 最后修改:2022 年 07 月 28 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果文章有用,请随意打赏。