我的前端工具集(六)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的更多相关文章

  1. 我的前端工具集(七)div背景网格

    我的前端工具集(七)div背景网格   liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候总觉得div颜色过于白,于是给了10%的灰 但是并不一定能解决问题,因为页面中会有不均衡的 ...

  2. 我的前端工具集(八)获得html元素在页面中的位置

    我的前端工具集(八)获得html元素在页面中的位置   liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候需要用点击等操作,来获取某元素在页面中的位置,然后在该位置添加某些操作 如 ...

  3. 都2022年了,你的前端工具集应该有vueuse

    摘要:一款基于Vue组合式API的函数工具集. 本文分享自华为云社区<vueuse:我不许身为vuer的前端,你的工具集只有lodash!>,作者: 前端要摸鱼 . vueuse 是什么? ...

  4. 前端工具 - 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  5. drf二次封装response-APIViews视图家族-视图工具集-工具视图-路由组件

    视图类传递参数给序列化类 (1).在视图类中实例化 序列化对象时,可以设置context内容. (2).在序列化类中的局部钩子.全局钩子.create.update方法中,都可以用self.conte ...

  6. 前端好的工具集推荐 lodash

    原来用 backbone 的时候, 感觉 underscore 是一个好的工具集,顿时感觉不错,不用自己一直去封装一些组件. 直到我遇到了 lodash,一只发现 web 项目中有依赖这个库的,但是一 ...

  7. Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集

    前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...

  8. 界面开发工具集Telerik UI for ASP.NET AJAX发布R2 2019

    Telerik UI for ASP.NET AJAX拥有构建ASP.NET AJAX和SharePoint应用程序的80+控件,将为任何浏览器和设备构建Web Forms应用程序的时间缩短一半.Te ...

  9. 添加ASP.NET AJAX控件工具集到VS2010的方法

    在VS2010中Ajax控件只有5个,其实还有很多支持AJAX特定功能的服务器控件,微软是将这些控件当作开放源代码项目.所以没有集成到VS2010中.这些AJAX控件被称为ASP.NET AJAX控件 ...

随机推荐

  1. jQuery Callback函数的用法

    在动画100%完成后,调用callback函数 语法如下 $(selector).hide(speed, callback); <!-- html部分 --> <button> ...

  2. Java Collections Framework知识结构目录

    The core collection interfaces are the foundation of the Java Collections Framework. The Java Collec ...

  3. 关于实现XX系统设计时所实现的质量属性战术

    可用性: 1)使用Try-catch对抛出的异常进行处理 2)使用Spring事务管理 易用性: 1)在类似删除相关选项时,弹出提示框,防止误操作 2)在不编辑基本信息时,对其进行折叠或者隐藏 3)提 ...

  4. 并发包CallableAndFuture

    /** * * @描述: Callable Future * * 程序运行一个线程,线程运行结束后,我们可以获取另一个线程的结果 * * @作者: Wnj . * @创建时间: 2017年5月16日 ...

  5. Angular开启两个项目方法

    Angular开启两个项目方法: ng server --port 80

  6. DFS BFS代码

    #define maxnum 30 #include<bits_stdc++.h> int visited[maxnum]={0}; using namespace std; typede ...

  7. July 18th 2017 Week 29th Tuesday

    My heart is stronger now that you are in it. 我的心里有了你,从此变得更强大. You will no longer feel lonely if ther ...

  8. June 21st 2017 Week 25th Wednesday

    Discontent is the first step in progress. 不知足是前进中的第一步. Several days ago, I wrote down a quote which ...

  9. hiredis

    hiredis是redis开源库对外发布的客户端API包. 当redis-server配置启动后,可以通过hiredis操作redis资源. 主要分为: strings.hash.lists.sets ...

  10. ZT SAFE_DELETE

    SAFE_DELETE 分类: c/C++ 2008-10-14 14:26 706人阅读 评论(2) 收藏 举报 delete文本编辑nullflash破解加密 我发现学程序大家差不多都有相似的地方 ...