我的前端工具集(六)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控件 ...
随机推荐
- curl POST JSON
1. 场景 Controller接收json格式数据 封装bean @RequestMapping(value = "/bb", method = RequestMethod.PO ...
- vim的日常使用
Esc 退出编辑模式,输入一下命令 :wq保存后退出 :wq!强制保存后退出 :w保存但不退出 :w!若文件为只读,强制保存 :q不保存退出 :q!不保存强制退出 :e!将文档还原到最原始状态
- JavaWeb中Servlet和JSP的分工案例
jsp和Servlet的分工: * JSP: > 作为请求发起页面,例如显示表单.超链接. > 作为请求结束页面,例如显示数据. * Servlet: &g ...
- TextView的跑马灯效果(AS开发实战第二章学习笔记)
TextView的跑马灯效果跑马灯用到的属性与方法说明singleLine 指定文本是否单行显示ellipsize 指定文本超出范围后的省略方式focusable 指定是否获得焦点,跑马灯效果要求设置 ...
- Unity使Text 文字逐个出现
Text tex; string s="Unity使Text 文字逐个出现"; //字符出现间隔 waitTime = 0.3f; // float speed=0; //方法一 ...
- C++ inheritance: public, private. protected ZZ
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...
- Python文件夹与文件的操作 ZZ
最近在写的程序频繁地与文件操作打交道,这块比较弱,还好在百度上找到一篇不错的文章,这是原文传送门,我对原文稍做了些改动. 有关文件夹与文件的查找,删除等功能 在 os 模块中实现.使用时需先导入这个模 ...
- MQ测试
2015年8月13日23:14:52 测试RabbitMq ====================== 千兆局域网:send ≍10000/s receive ≍7000/s 百兆局域网:send ...
- Asp ose.Tota l for .NET 2015
How to license Aspose.Total for .NET products Add "License.cs" [C#] OR "License.vb&qu ...
- Last_SQL_Error: Error 'Can't drop database 'ABC'; database doesn't exist' on query. Default database: 'ABC'. Query: 'drop database ABC'
查看从库状态发现报错: show slave status\G; 发现是主库上删除了一个数据库,但是从库上面没有,从库执行这个语句的时候失败报错. 解决方法: 停止从库 stop slave; 创建语 ...