我的前端工具集(六)Ajax封装token
我的前端工具集(六)Ajax封装token
liuyuhang原创,未经允许禁止转载
在单点登陆中,或登陆验证后,不应该每次都验证用户名和密码,
也不应该将用户名密码存入cookie中(虽然很多都这么做)
token作为一种验证策略,实现起来比较简单,也可以找一些单点登陆的框架,或者token解决方案。
本文工具使用REST风格,将ajax经过简单封装,使得所有使用此封装后的ajax都默认进行token验证。
1、封装的ajax代码
/**
* 封装ajax代码
*/
var local = window.location.protocol + "//" + window.location.host + "/";
function ajaxWithToken(url, data, success, error, other) {
$.ajax({
type : 'POST',
url : local + url + "?token=" + token,
data : data,
async : true,
success : function(resultMap) {
console.log(resultMap)
if (resultMap.status != true) {
console.log("返回登陆页面的重定向代码")
} else {
success(resultMap); //调用自定义的success
}
},
error : error, //调用自定义的error
});
if (null != other & '' != other & 'undefinde' != typeof other) {
eval(other); //尾部执行的其他代码
}
}
2、测试html代码
<div style="padding:10px">
<h2>This is a page to test Token.</h2>
<div id="token" style="padding:5px"></div>
<br>
<div class="col-lg-3" style="margin-top:20px">
<button type="button" class="btn btn-default" onclick="testToken()">测试token</button>
</div>
</div>
3、测试调用封装的ajax代码
window.token = '';
function testToken() {
ajaxWithToken(
'login',
'',
function(resultMap) {
console.log(resultMap.token)
window.token = resultMap.token; //将获取的token写入全局变量
$("#token").html(window.token);
},
function(resultMap) {
console.log(resultMap)
}
);
}
4、后台代码
使用的springboot-controller
@RestController // 等同于responseBody + controller双重注解
public class HelloExample {
/**
* 假设首次登陆成功,返回token作为全局变量备用.
* 之后每次都验证token 本代码应该写在拦截器中,作为登陆拦截发放token使用.
* @param request
* @return
*/
@RequestMapping("/login")
public Map<String, Object> login(HttpServletRequest request) {
Map<String, Object> resultMap = new HashMap<String, Object>();// 定义结果集
HttpSession session = request.getSession();
String checkToken = request.getParameter("token");// 获取url中的token
String token = (String) session.getAttribute("token");// 获取session中的token
// 严重token
if (!checkToken.equals(token)) {// token验证未通过
// 应先返回登陆页面,重新登陆
// 或token验证未通过但登陆通过,发放token
// 确保token只发放一次,session过期,就需要重新登陆
// 在tomcat连接池中定义session过期时间,默认30min
token = UUID.randomUUID().toString();// 首次访问定义token
session.setAttribute("token", token);// 储存token到session,若为集群应存入集群中,实现单点登陆
}
resultMap.put("token", token);
resultMap.put("status", true);//验证token是否通过后,以此确定是否让前端页面重定向到登陆页面
System.out.println(resultMap);
return resultMap;
}
}
5、测试图例
前端

后端

根据实际需要自己更改工具吧!
以上!
我的前端工具集(六)Ajax封装token的更多相关文章
- 我的前端工具集(七)div背景网格
我的前端工具集(七)div背景网格 liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候总觉得div颜色过于白,于是给了10%的灰 但是并不一定能解决问题,因为页面中会有不均衡的 ...
- 我的前端工具集(八)获得html元素在页面中的位置
我的前端工具集(八)获得html元素在页面中的位置 liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候需要用点击等操作,来获取某元素在页面中的位置,然后在该位置添加某些操作 如 ...
- 都2022年了,你的前端工具集应该有vueuse
摘要:一款基于Vue组合式API的函数工具集. 本文分享自华为云社区<vueuse:我不许身为vuer的前端,你的工具集只有lodash!>,作者: 前端要摸鱼 . vueuse 是什么? ...
- 前端工具 - 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- drf二次封装response-APIViews视图家族-视图工具集-工具视图-路由组件
视图类传递参数给序列化类 (1).在视图类中实例化 序列化对象时,可以设置context内容. (2).在序列化类中的局部钩子.全局钩子.create.update方法中,都可以用self.conte ...
- 前端好的工具集推荐 lodash
原来用 backbone 的时候, 感觉 underscore 是一个好的工具集,顿时感觉不错,不用自己一直去封装一些组件. 直到我遇到了 lodash,一只发现 web 项目中有依赖这个库的,但是一 ...
- Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集
前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...
- 界面开发工具集Telerik UI for ASP.NET AJAX发布R2 2019
Telerik UI for ASP.NET AJAX拥有构建ASP.NET AJAX和SharePoint应用程序的80+控件,将为任何浏览器和设备构建Web Forms应用程序的时间缩短一半.Te ...
- 添加ASP.NET AJAX控件工具集到VS2010的方法
在VS2010中Ajax控件只有5个,其实还有很多支持AJAX特定功能的服务器控件,微软是将这些控件当作开放源代码项目.所以没有集成到VS2010中.这些AJAX控件被称为ASP.NET AJAX控件 ...
随机推荐
- html 之 position用法
引用: position的四个属性值: 1.relative2.absolute3.fixed4.static下面分别讲述这四个属性. <div id="parent"> ...
- Redis学习笔记(二) ---- PHP操作Redis各数据类型
Redis 一.使用PHP操作Redis存储系统中的各类数据类型方法 1.String(字符串)操作 <?php // 1. 实例化 $redis = new Redis; // 2. 连接 r ...
- 系统变量 %USERPROFILE%
可以用CMD的SET命令来查看现有的系统变量,“="前的部分用%括起来就是. 常用: %USERPROFILE% =C:\Users\用户名 %SystemRoot% =C:\WINDO ...
- Hadoop自定义JobTracker和NameNode管理页面
为了可以方便地在hadoop的管理界面(namenode和jobtracker)中自定义展示项,使用代理servlet的方式实现了hadoop的管理界面. 首先, 在org.apache.hadoop ...
- $.each遍历JSON字符串和 Uncaught TypeError: Cannot use 'in' operator to search for '156错误
现在页面和后端交互都流行使用json了 自己记录一下解析字符串的方法,要不老是忘记!!!! success: function (data) { //data是后台传过来的字符串 $.each(JS ...
- PHP开发必用的mysql那么你知道Mysql中MyISAM和InnoDB的区别吗?
构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型. .frm文件存储表定义. 数据文件的扩展名为.MYD (MYData). 索引文件的扩展名 ...
- 使用jQuery操作input的value值
表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用jquery方法操作表单控件的方法: $(selector ...
- sqlserver根据条件生成插入语句--单表
ALTER proc [dbo].[proc_insert] (@tablename varchar(256),@where varchar(max))asbeginset nocount ondec ...
- PowerShell管理Azure
PowerShell第一次连接Azure1.下载Azure SDK,安装azure powershell http://azure.microsoft.com/zh-cn/downloads/?rnd ...
- QT的组件布局
在QT的IDE下,编写一个自定义布局. #include<QApplication> #include<QWidget> #include<QSpinBox> #i ...