博客系统后端设计(五) -实现登录页面要求强制登录功能

news2024/10/6 12:28:11

文章目录

  • 实现页面要求强制登录
    • 实现思路
      • 1.约定前后端交互接口
      • 2.实现后端代码
      • 3.修改前端代码

实现页面要求强制登录


当用户访问列表页/详情页/编辑页的时候,要求用户已经是登录的状态了,
如果用户还没登录,就会强制跳转到登录页面。

实现思路


在页面加载的时候,专门发起一个新的 ajax 。(一个页面里可以发多个 ajax 请求)
如果以列表页为例,先发一个请求获取列表页,在获取列表页的时候再发个 ajax 获取用户的登录状态
如果用户已经登录,就不会发生什么是;如果没有登录,就会跳转到登录页面。

1.约定前后端交互接口


这里约定请求是 GET,路径是 /login。

响应是 HTTP/1.1 200 OK 返回的是当前的登录的用户信息,如果未登录,就返回一个 userId 为 0 的user对象。

用户信息如下述图片所述。

2.实现后端代码

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     resp.setContentType("application/json; charset=utf8");
     // 如果用户未登录,这里的会话就拿不到
     HttpSession session = req.getSession(false);
     if (session == null) {
         // 未登录,返回一个空的 user 对象
         User user = new User();
         String respJson = objectMapper.writeValueAsString(user);
         resp.getWriter().write(respJson);
         return;
     }
     User user = (User) session.getAttribute("user");
     // 登录成功,确保拿到的回话不是空,再判定一次
     if (user == null) {
         user = new User();
         String respJson = objectMapper.writeValueAsString(user);
         resp.getWriter().write(respJson);
         return;
     }
     // 确定了拿出了会话,也就是用户的信息,就直接返回即可
     String respJaon = objectMapper.writeValueAsString(user);
     resp.getWriter().write(respJaon);
 }

3.修改前端代码


修改博客列表页的代码,将下列代码添加到列表页、编辑页、详情页。

 function checkLogin() {
      $.ajax({
          type: 'get',
          url: 'login',
          success: function(body) {
              if (body.userId && body.userId > 0) {
                  // 登录成功!
                  console.log("当前用户已经登录!!!");
              } else {
                  // 当前未登录,跳转到登录页面
                  location.assign('blog.in.html');
              }
          }
      });
  }
        
  checkLogin();


location.assign(‘blog.in.html’) 这条语句中填写的是登录页的路径。

此时如果是还没登陆的状态,在登陆了详情页、列表页以及编辑页的时候就会自动跳转到登录页。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精通SpringCloud/Boot配置文件在Nacos中的配置

目录 1 什么是nacos? Nacos 地图 Nacos 生态图 2 springcloud中精通Nacos的配置中心 目录结构 日志配置文件 原始的配置文件 使用Nocas对配置文件进行拆分 引用nacos中的配置文件 共享nacos中的配置文件操作 我们使用同样的方法将日志配置提取出来 1 什么是nacos?…

微信过期视频怎么恢复?恢复视频的方法已经给你总结好了!

案例:微信视频过期,已经被清理怎么办? 【朋友之前发的视频过期了,现在怎么都找不到,有什么方法可以恢复回来吗?感谢!】 微信作为一款热门的社交应用程序,允许用户发送和接收照片、视…

搭建Freekan私人影视电影网站,cpolar内网穿透发布上线

文章目录 1.前言2.本地网页搭建2.1 环境使用2.2 支持组件和环境设置2.3 支持组件选和环境设置2.4 网页安装2.5 测试和使用2.6 问题解决 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDNprobezy的文章:使用Cpolarfreekan源码…

MATLAB绘制动画(五)GIF

GIF这个文件大家就比较熟悉了,我们通常当做表情包的动图一般都是用GIF格式。 这是因为GIF格式的文件比较小,传输速度快。 用MATLAB生成GIF图像同样需要将图像保存下来,通过循环展示动画 代码如下: clc; clear; close all; set…

SpringCloud(27. Redis 和 ZK 分布式锁)

上一篇 :26.分布式服务框架Dubbo面试题简析 1. redis 分布式锁 官方叫做 RedLock 算法,是 redis 官方支持的分布式锁算法。这个分布式锁有 3 个重要的考量点: 互斥(只能有一个客户端获取锁)不能死锁容错(…

关于SD webui 部署运行的一些坑

[Bug 1]: RuntimeError: Couldnt install gfpgan 可以先尝试: pip install gfpgan 不过是在虚拟环境venv下的 E:\stable-diffusion-webui\venv\Scripts\python.exe -m pip install gfpgan 如果还是无法安装gfpgan的原因是网络问题,就算已经科学上网…

maven 项目依赖加载不出来

1.依赖加载不出来,查看pom.xml放的位置是否对了 2.1下载mvn到本地,进行解压 2.2新建系统变量MAVEN_HOME,值直接指向安装目录D:\apache-maven-3.9.2 2.3path变量中增加:%MAVEN_HOME%\bin 2.4若仓库位置不在C盘用户下&#xff0…

SpringMVC对请求的处理流程

1.用户发起some.do请求 2.DispatcherServlet中央调度器接收请求some.do,把请求转交给处理器映射器  处理器映射器:SpringMVC框架中的一种对象,框架实现了HandlerMapping接口的类都叫映射器(多个) 处理器映射器的作用:根据请求&a…

Ajax加强(xhr、XML、JSON、xhr上传文件)

文章目录 一、XMLHttpRequest的基本使用1、 使用xhr发起GET请求2、了解xhr对象的readyState属性3、使用xhr发起带参数的GET请求4、查询字符串5、URL编码与解码6、使用xhr发起POST请求 二、数据交换格式1、XML(1)XML和HTML的区别(2&#xff09…

gma 1.1.6 | 2.0.0a1 (2023.05.14) 更新日志

从现在开始,gma 开始同步更新 gma 2 的前期预览版,并与 gma 1 的正式版同步发布。 gma 1.1.6 更新日志 新增 1、添加 3组 新的指北针样式。 修复 1、【map】高分辨栅格数据集内存溢出问题。   添加高分辨率栅格数据集且进行强制数据缩放时 偶现内存…

论文中文翻译——VulCNN An Image-inspired Scalable Vulnerability Detection System

本论文相关内容 论文下载地址——Web Of Science论文中文翻译——VulCNN An Image-inspired Scalable Vulnerability Detection System 文章目录 本论文相关内容前言VulCNN:一种基于图像的可扩展漏洞检测系统作者信息摘要CCS概念关键词ACM参考格式1 引言2 动机3 方…

软考A计划-真题-分类精讲汇总-第十八章(面向对象程序设计)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

CorelDRAW2023最新中文版下载操作教程

CorelDRAW是一个功能强大的矢量绘图工具,也是国内外最流行的平面设计软件之一,它是平面设计和电脑绘画功能为一体的专业设计软件,被广泛应用于平面设计、广告设计、企业形象设计、字体设计、插图设计、工业造型设计、建筑平面图绘制、Web图形…

《终身成长》笔记三——失败挫折的意义

目录 经典摘录 成长型思维方式的人并非感觉不到挫折感,抑郁感,但会很快反应过来,并马上应对 关于能力和成就,我们有很多错误的想法,特别是我们总认为,是那些孤独、聪明的人突然间发明了了不起的东西 思维…

需要买apple pencil吗?比较好用的ipad手写笔

实际上,苹果Pencil和市面上常见的电容笔最大的不同之处在于,它们的重量和压感是不同的。但由于苹果Pencil价格较高,且平替电容笔的各项功能也在不断完善,因此,平替的使用逐渐取代了苹果Pencil。下面,我就给…

博途中S7-1200中DB块整体清零(非优化的DB)的方法演示

博途中S7-1200中DB块整体清零(非优化的DB)的方法演示 具体方法可参考以下内容: 如下图所示,博途中新建项目后,添加一个DB块,我这里以命名为DB112,并取消优化的块访问, 如下图所示,在该DB块中添加几个变量,编译该DB块后会出现具体的偏移地址, 如下图所示,添加一个…

Maven基础学习---1、Maven的作用、什么是Maven

1、Maven的作用 1.1 Maven作为依赖管理工具 1、jar包的规模 随着我们使用越来越多的框架,或者对框架封装程度越来越高,项目中使用的jar包也越来越多。项目中,一个模块里面用到上百个jar包时非常正常的。 比如下面的例子,我们只…

Java --- redis7的缓存淘汰策略

目录 一、redis内存查看与设置 二、redis的数据删除方式 三、redis缓存淘汰策略 一、redis内存查看与设置 查看redis最大占用内存: redis默认内存使用: 不设置最大内存大小或设置为0,在64位操作系统下不限制内存大小,32位操作系…

【Python 统计学习】零基础也能轻松掌握的学习路线与参考资料

Python 作为一种功能强大而且易于使用的编程语言,被广泛应用于数据科学和统计学习领域。如果你想要在这个领域有所成就,下面是 Python 统计学习学习路线的建议。 Python 基础知识 如果你还没有 Python 的基础知识,那么首先需要学习 Python 的…

博客园美化教程

博客园美化教程 一、进入管理>设置>勾选下面的JS权限,然后填写一下开通的理由等待管理员进行审核通过。 二、选择下面的博客皮肤 三、贴入以下CSS代码到自定义,并禁用CSS默认模板 *,.Cal{padding:0}::-moz-selection{background:#807dd4;color:#…