首页 > 其他分享 >第一次项目搭建笔记&路由导航守卫&web前后端会话跟踪

第一次项目搭建笔记&路由导航守卫&web前后端会话跟踪

时间:2024-08-19 19:26:19浏览次数:14  
标签:npm web axios 请求 token 过滤器 端会话 com 路由

1.重新搭建后端项目

在IDEA中重新创建一个JavaEE项目,记得勾选Web profile

之后在java文件中重新搭建分级的文件夹

按照标准创建com.xxxx.dorm文件夹并创建dao(数据处理),filter(过滤器),model(模型),util(工具),web(服务端)等文件夹进行不同功能部分的分类

在这里插入图片描述

搭建完基本的框架后一步步根据需求丰富功能即可,记得要把servlet和过滤器进行注册,一般会固定的设置基础的编码过滤器和跨域过滤器

编码过滤器和跨域过滤器

public class CorsFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        //允许携带Cookie时不能设置为* 否则前端报错
        httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域
        httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookie

        filterChain.doFilter(servletRequest, servletResponse);
    }
}
public class EncodingFilter implements Filter {

    String reqencod = "";
    String respencod = "";

    /*
    * 初始化过滤*/
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化过滤器");
        reqencod = filterConfig.getInitParameter("reqencod");
        respencod = filterConfig.getInitParameter("respencod");
        System.out.println(reqencod);
        System.out.println(respencod);
    }

    @Override
    public void destroy() {
        System.out.println("销毁过滤器");
    }

    /*
    * 执行过滤操作的方法*/
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //设置请求字符集
        servletRequest.setCharacterEncoding(reqencod);
        //设置相应字符集
        servletResponse.setContentType(respencod);
        //让请求离开过滤器继续向下执行,下一个可能是过滤器,也可能是目标servlet
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

在web.xml中注册过滤器和服务器

<!--    注册登录servlet-->
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.george.dorm.web.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    
    
<!--    编码过滤器-->
    <filter>
        <filter-name>encodFilter</filter-name>
        <filter-class>com.george.dorm.fillter.EncodingFilter</filter-class>
        <init-param>
            <param-name>reqencod</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>respencod</param-name>
            <param-value>text/html;charset=utf-8</param-value>
        </init-param>
    </filter>
<!--    编码过滤器映射-->
    <filter-mapping>
        <filter-name>encodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!--    跨域过滤器-->
    <filter>
        <filter-name>corsFilter</filter-name>
        <filter-class>com.george.dorm.fillter.CorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>corsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>xm'l

之后要在Tomcat中部署项目

在这里插入图片描述

在这里插入图片描述

2.运行前端项目

前端在之前已经提前搭建好了,只需要在原有的基础上进行微调即可

3.登录向后端发送请求

使用axios发送异步请求

首先需要在vue项目中安装axios

安装axios

安装axios需要在此vue项目的终端中输入

npm install axios

如果没有配置镜像文件可能会下载的很慢甚至不下载,所以此时需要配置npm的镜像文件

国内的npm镜像源有以下几种:

npm 官方原始镜像网址是:https://registry.npmjs.org/
淘宝 NPM 镜像:http://registry.npmmirror.com
阿里云 NPM 镜像:https://npm.aliyun.com
腾讯云 NPM 镜像:https://mirrors.cloud.tencent.com/npm/
华为云 NPM 镜像:https://mirrors.huaweicloud.com/repository/npm/
网易 NPM 镜像:https://mirrors.163.com/npm/

如何使用镜像源:

想要使用哪个镜像就通过 npm config set registry + 对应的镜像网址就好了

以华为云为例:

npm config set registry https://mirrors.huaweicloud.com/repository/npm/

安装好后检查当前的镜像源是否切换

npm config get registry

在这里插入图片描述

出现如图的结果则证明镜像源切换完毕

之后再通过npm install axios就可以很快速的下载好axios了

下载好之后在main.js中导入axios

// 导入axios
import axios from 'axios';
//定义后端基本地址   后续发送请求时,只需要写servlet地址即可,会自动将这部分拼接过去
axios.defaults.baseURL="http://192.168.124.26:8899/dorm/"
//将axios挂载到vue对象中
Vue.prototype.$http=axios;

4.后端创建搭建LoginServlet

接收请求数据

调用其他程序处理(jdbc)

向前端做出响应

5.前端接收响应,根据响应做出处理

在浏览器存储当前登录的管理员信息

跳转到main组件

取出并展示管理员信息

安全退出,清除浏览器中的管理员信息,跳转到登录组件

6.前端添加一个路由导航守卫

//配置路由导航守卫, 每当进行一次组件路由时,自动执行此段代码
rout.beforeEach((to,from,next)=>{
	if(to.path=='/login'){ //to.path 访问的路由地址
     	return next();//继续正常访问目标地址
	}else{
		var account = sessionStorage.getItem("account");//获取到浏览器中存储的管理员信息
		if(account==null){ //如果信息为空,说明没有登录
		  return next("/login");
		}else{//说明已经登录,可以正常访问
		  return next();
		}
	 }
})

7.web前后端之间的会话跟踪

当我们登录成功后,在管理系统中继续其他操作(例如查询自己的成绩)

当我们的请求发送到后端后,后端程序默认不知道本次请求是谁发送的

因为http请求是无状态的,不携带用户信息的,当用户登录成功后.此后再次与服务器交互时,服务器并不知道是哪个用户发送的请求,在web开发中必须解决此问题(之后的请求,还需要让后端知道是哪个账号发送的请求)

在这里插入图片描述

具体实现

1,在登录成功后,在后端为用户生成一个成为token的字符串(token令牌)

使用jwt为管理员生成token字符串,可以携带管理员信息,并且可以加密存储

JWT生成的token有三部分

1,声明:生成类型,加密算法

2,载荷:管理员信息(id,账号,头像)

3,签证:结合前两部分,密钥,加密生成的(最重要的)

2.浏览器中储存token

储存的token用于实时验证身份,在不同的操作中都需要验证

3.之后的请求把token携带一起发向后端

axios请求拦截器

把后端验证token的代码提取到一个过滤器中(登录不能进入过滤器)

可以将过滤器的范围设置为某个目录下的所有地址,只需要将login以外的所有地址都放在这个地址之下就可以实现除login之外所有操作均验证token,在过滤器中将token验证失败的情况设置成一种result,错误码设置为401,axios响应拦截器,对错误码为401的情况进行拦截响应

axios响应拦截器

拦截后端响应 把500 401状态码统一拦截

// 添加响应拦截器
axios.interceptors.response.use((resp) =>{//正常响应拦截
if(resp.data.code==500){
ElementUI.Message({message:resp.data.message,type:"error"})
}
if(resp.data==401){
router.replace("/login");
}
return resp;
});

标签:npm,web,axios,请求,token,过滤器,端会话,com,路由
From: https://blog.csdn.net/2301_80931793/article/details/141333037

相关文章

  • ctfshow-web入门-sql注入(web224-web230)文件类型注入、routines存储过程与函数状态、ha
    目录1、web2242、web2253、web2264、web2275、web2286、web2297、web2301、web224登录页面测了下没发现注入点存在robots.txt访问/pwdreset.php  ,是管理员密码重置的页面直接重置密码,这里以123456为例使用admin/123456登录 来到一个文件生成界......
  • WEB渗透免杀篇-免杀工具全集
     往期文章 WEB渗透免杀篇-加载器免杀-CSDN博客 WEB渗透免杀篇-分块免杀-CSDN博客WEB渗透免杀篇-Powershell免杀-CSDN博客WEB渗透免杀篇-Python源码免杀-CSDN博客WEB渗透免杀篇-C#源码免杀-CSDN博客WEB渗透免杀篇-MSF+shellcode免杀-CSDN博客WEB渗透免杀篇-Bypass-AMS......
  • Vulnhub靶机:AI-WEB-1.0
    一.网站查询二.扫描当前网站目录 扫出有http://172.16.1.88/robots.txt继续扫这个刚扫出来的,然后得出 我们再访问m3dinfo/info.php和 /se3reTdir777/这俩目录 得到如上图所示三.进行sql注入1.判断是否有sql注入 /有结果,有报错 2.利用burp抓包进行注入......
  • 7.路由器配置及使用
    9.1路由器的结构内存只读内存随机存储器ARP:广播信息非易失随机存储器闪存9.2路由器的工作原理9.3路由表注意,分两种路由表路由器的路由表(基于端口的)三层交换机的路由表(基于vlan的)9.4路由器的工作模式9-5路由器的基本配置及常见命令路......
  • Java轻松实现跨平台(Windows、Linux)多协议(Twain、Sane)的Web扫描
     由于项目需要,开发在Windows下与Linux下扫描功能,Linux主要是信创的两个系统(UOS、麒麟),研究了一下发现,Windows使用Twain协议与扫描仪通讯,Linux使用的是Sane协议与扫描仪通讯,找到Twain协议和Sane协议的标准文档,英文的,都有大几百页,项目一个月内要求上线,明显没时间慢慢研究,于......
  • WebGIS产品分析
    WebGIS(网络地理信息系统)是指基于网络平台,客户端应用软件采用网络协议,运行在网络上的地理信息系统,即将GIS所能提供的功能通过网络展现给用户。顾名思义,WebGIS就是展现在网络上的GIS,是GIS与Web融合的产物。GIS通过Web功能得以扩展,使得GIS冲破专业圈子,真正成为大众化的GIS。如今,网......
  • 界面控件DevExpress ASP.NET Web Forms v24.1最新版本系统环境配置要求
    本文档包含有关安装和使用 DevExpressASP.NETWebForms控件的系统要求的信息。点击获取DevExpressv24.1正式版.NETFrameworkDevExpressASP.NETWebForms控件支持以下.NET框架版本。如果您需要DevExpress产品的早期版本,请咨询“在线客服”获取。IDEDevExpressASP.......
  • 秒开WebView?Android性能优化全攻略
    在如今的移动应用时代,用户体验的好坏直接关系到应用的成功与否。而在众多的用户体验因素中,应用的加载速度尤其重要。特别是对于使用 WebView 加载网页的应用,如果加载速度过慢,用户往往会产生不满,从而流失。因此,实现“秒开”WebView成为了开发者必须面对的一项挑战。本文将深......
  • net core web api 支持xml参数 设置
    废话不多说,上教程。......
  • Web大学生网页作业成品——24节气立夏介绍网页设计与实现(HTML+CSS)(1个页面)
    ......