前后端连接完后的各种安全问题

前后端连接完后的各种安全问题:

当我们完成前后端链接后,这只是第一步,接下来各种安全问题才是前后端交互的重中之重。

后端:

一.管理员

当前端把账号密码之类的用户信息传来后端后,我们还需要一个管理员来保存这些数据,而我们要返回给前端保存在浏览器的数据是管理员的数据,这样把数据封装到类里,方便我们进行各种操作。

Admin:

public class Admin {private int id;private String account;private String password;private String gender;private String phone;private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public Admin(){};public Admin(int id,String account,String password,String gender,String phone,String name){this.account=account;this.id=id;this.password=password;this.phone=phone;this.gender=gender;this.name=name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}
}

二.dao层

Dao中查到数据后把其交给管理员:

			ResultSet rs=ps.executeQuery();//查到后把数据交给管理员while(rs.next()){admin=new Admin();admin.setId(rs.getInt("id"));admin.setAccount(rs.getString("account"));admin.setGender(rs.getString("gender"));admin.setPassword(rs.getString("password"));admin.setPhone(rs.getString("phone"));admin.setName(rs.getString("name"));}return admin;

这里返回一个管理员类,这是因为最终返回前端的信息一般都有一个格式就是

(code,desc,result),code表示当前链接状况,desc表示要提示的信息,result里面是要返回的保存数据的类,也就是管理员类

三.Servlet

所以Servlet中接收到前端的数据后然后交给dao层判断,如果dao层返回了一个admin说明在数据库查到了该用户,如果返回admin是空说明没查到:

        //接收前端提交的数据String account=req.getParameter("account");String password=req.getParameter("password");//调用其他的java程序处理 例如调用dao层 与数据库交互LoginDao loginDao=new LoginDao();Result<Admin> result=null;try {Admin admin=loginDao.login(account,password);//向前端做出相应if(admin!=null){result=new Result<>(200,"登录成功",admin);}else {result=new Result<>(201,"账号或密码错误",null);}} catch (SQLException throwables) {throwables.printStackTrace();result=new Result<>(500,"系统忙",null);}
resp.getWriter().print(newObjectMapper().writeValueAsString(result));

四.Result

其中Result就是保存code,desc,result的:

public class Result<T> {private int code;private String desc;private T result;public Result(){};public Result(int code,String desc,T result){this.code=code;this.desc=desc;this.result=result;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public T getResult() {return result;}public void setResult(T result) {this.result = result;}
}

前端:

一.接收后端的响应:

我们需要把后端的数据送到session(会话)或者cookie里,(cookie可以一直保存,会话会随着浏览器关闭而消失)。然后前端就可以随时从cookie或者会话中得到这些数据

		   //与后端进行交互this.$http.post("login","account="+this.form.account+"&password="+this.form.password).then((resp)=>{//根据后端响应回来的结果进行处理if(resp.data.code==200){//登陆成功sessionStorage.setItem("account",resp.data.result.account);sessionStorage.setItem("gender",resp.data.result.gender);sessionStorage.setItem("name",resp.data.result.name);sessionStorage.setItem("phone",resp.data.result.phone);sessionStorage.setItem("id",resp.data.result.id);this.$router.push("/viewmain");}else if(resp.data.code==201){this.$message({message:resp.data.desc,type:'warning'});return;}else if(resp.data.code==500){this.$message({message:resp.data.desc,type:'warning'});return;}});

二.从会话中获得信息显示在浏览器:

		        <span>{{form.user_name}}</span>
 export default{data(){return{form:{user_name:"",}}},methods:{},mounted(){this.form.user_name=sessionStorage.getItem("name");}}

三.路由导航卫士:

为了防止未登录便进入到主菜单等vue,我们需要路由导航卫士检测如果会话中没有保存登陆账户说明没有登录上,所以不可以进入到除login组件以外的组件。0

//每发生一次路由跳转时,自动触发beforeEach()
rout.beforeEach((to,from,next)=>{if(to.path=='/login'){	//如果访问登陆组件,不需要任何判断,直接放行return next();}else{var account=window.sessionStorage.getItem("account");if(account==null){	//用户信息为空,说明用户没有登录return next("/login");}else{	//说明用户以及登录next();}}
})

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

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

相关文章

芯片数字后端设计入门书单推荐(可下载)

数字后端设计&#xff0c;作为数字集成电路设计的关键环节&#xff0c;承担着将逻辑设计转化为物理实现的重任。它不仅要求设计师具备深厚的电路理论知识&#xff0c;还需要对EDA工具有深入的理解和熟练的操作技能。尽管数字后端工作不像前端设计那样频繁涉及代码编写&#xff…

VTK----VTK数据结构详解(几何篇)

在讲VTK的数据结构之前,我们先了解可视化数据的两个特征:离散性、有规则或无规则。 离散性。当我们使用计算机去表示我们的数据时,一般都是基于有限数量的点做信息的采样(或插值),因此可视化的数据是以一种离散的方式表示的。有规则或无规则(也叫结构化或非结构化)。针…

从0开始深入理解Spring(1)--SpringApplication构造

从0开始深入理解Spring-启动类构造 引言: 从本篇开始&#xff0c;打算深入理解Spring执行过程及原理&#xff0c;个人理解极有可能有偏差&#xff0c;评论区欢迎指正错误&#xff0c;下面开始进入正片内容。 ps: springboot版本使用2.4.8 Springboot项目启动时&#xff0c;是通…

PMSM MATLAB

// s-function搭建变参数PMSM模型 永磁同步电机dq轴电感和其内部结构有何关系&#xff1f;​​​​​​​ 矢量控制&#xff0c;SVPWM开关频率一般20kHZ&#xff0c;是不是开关频率提越高控制效果越好&#xff1f;频率提高有没有意义&#xff1f; 一般来说&#xff0c;电机电…

【Leetcode】链表专题

leetcode链表专题 主要根据CSview一个校招刷题准备网站 做这个网站的人真的很厉害&#xff01;进行整理 太困了&#xff0c;一学习就困&#xff0c;来刷刷题 文章目录 leetcode链表专题前言一、leetcode 206.反转链表1.题目描述&#xff1a;2.主要有两种方法&#xff0c;迭代法…

发送钉钉、邮件、手机信息

其中下列部分用到了Hutool中的工具,可先导入Hutool依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>钉钉 public void sendDingDing(PoMaster poMa…

Ugee手写板Ex08 S在不同软件中的设置

手写笔的结构 功能对应于鼠标的作用笔尖鼠标左键上面第一个键鼠标右键&#xff08;效果有时候也不完全等同&#xff09;上面第二个键鼠标中键 以下测试的软件版本 软件版本windows10WPS2024春季16729Office2007SimpleTex0.2.5Ex08 S驱动版本4.2.4.231109 WPS-word ①点击审…

《R语言与农业数据统计分析及建模》学习——创建与访问数据框

1、数据框的概念和特点 数据框是二维的表格形式数据结构&#xff0c;是R语言中最常用的数据结构之一。有如下特点&#xff1a; &#xff08;1&#xff09;异质性&#xff1a;各列不同的数据类型 &#xff08;2&#xff09;命名索引&#xff1a;每列都有一个名称 &#xff08;3&…

开源Windows12网页版HTML源码

源码介绍 开源Windows12网页版HTML源码&#xff0c;无需安装就能用的Win12网页版来了Windows12概念版&#xff08;PoweredbyPowerPoint&#xff09;后深受启发&#xff0c;于是通过使用HTML、CSS、js等技术做了这样一个模拟板的Windows12系统&#xff0c;并已发布至github进行…

go并发编程以及socket通信的理解

go并发编程以及socket通信的理解 文章目录 go并发编程以及socket通信的理解一、管道的简单使用二、go中的socket实现通信 一、管道的简单使用 " golang不是通过共享内存来通信&#xff0c;而是通过通信来共享内存 " 1、go简单初始化 // golang不是通过共享内存来通…

蓝桥杯2024年第十五届省赛真题-小球反弹

以下两个解法感觉都靠谱&#xff0c;并且网上的题解每个人答案都不一样&#xff0c;目前无法判断哪个是正确答案。 方法一&#xff1a;模拟 代码参考博客 #include <iostream> #include <cmath> #include <vector>using namespace std;int main() {const i…

(二十)C++自制植物大战僵尸游戏僵尸进攻控制实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs 文件位置 实现功能的代码文件位置在Class\Scenes\GameScene文件夹中&#xff0c;具体如下图所示。 ZombiesAppearControl.h /* 僵尸出现波数控制 */ class ZombiesAppearControl { public:/***对于进攻的不同波数…

【吊打面试官系列】Java高并发篇 - 如何停止一个正在运行的线程?

大家好&#xff0c;我是锋哥。今天分享关于 【如何停止一个正在运行的线程&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 如何停止一个正在运行的线程&#xff1f; java如何停止一个正在运行的线程? 在Java中&#xff0c;可以使用Thread.stop()方法来停止一…

Android自带模拟器如何获得ROOT权限

如果在模拟器中不能切换到root权限&#xff0c;很可能是镜像使用的不对。 一.选择镜像标准&#xff1a; 1.运行在PC端选X86_64镜像&#xff0c;才能流畅运行 2.不带google api的镜像 二.步骤 在虚拟机管理器中新建AVD&#xff0c;并下载符合要求的镜像文件 三.验证

【MATLAB】App 设计 (入门)

设计APP 主界面 函数方法 定时器 classdef MemoryMonitorAppExample < matlab.apps.AppBase% Properties that correspond to app componentsproperties (Access public)UIFigure matlab.ui.FigureStopButton matlab.ui.control.ButtonStartButton matlab.ui.cont…

大模型ChatGPT里面的一些技术和发展方向

文章目录 如何炼成ChatGPT如何调教ChatGPT如何武装ChatGPT一些大模型的其他方向 这个是基于视频 https://www.bilibili.com/video/BV17t4218761&#xff0c;可以了解一下大模型里面的一些技术和最近的发展&#xff0c;基本都是2022你那以来的发展&#xff0c;比较新。然后本文…

SpringMVC 异常没有处理,发送 /error 请求(404 错误)

现象&#xff1a; 在过滤器中进行鉴权时候抛出了异常&#xff0c;此时客户端会收到 404 错误&#xff0c;接口确定是存在&#xff0c;为什么会收到 404 错误呢&#xff1f; {"timestamp": "2024-04-16T03:12:19.83200:00","status": 404,"…

最新版的GPT-4.5-Turbo有多强

OpenAI再次用实力证明了&#xff0c;GPT依然是AI世界最强的玩家&#xff01;在最新的AI基准测试中&#xff0c;OpenAI几天前刚刚发布的GPT-4-Turbo-2024-04-09版本&#xff0c;大幅超越了Claude3 Opus&#xff0c;重新夺回了全球第一的AI王座&#xff1a; 值得一提的是&#xf…

C++ 模板详解——template<class T>

一. 前言 在我们学习C时&#xff0c;常会用到函数重载。而函数重载&#xff0c;通常会需要我们编写较为重复的代码&#xff0c;这就显得臃肿&#xff0c;且效率低下。重载的函数仅仅只是类型不同&#xff0c;代码的复用率比较低&#xff0c;只要有新类型出现时&#xff0c;就需…

LeetCode 34在排序数组中查找元素的第一个和最后一个位置

LeetCode 34在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组nums&#xff0c;和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复…