精华内容
下载资源
问答
  • Token登录验证

    千次阅读 2018-05-28 21:43:57
    然后对字符串拼接后的Token进行sha256加密,加密后,在操作需要登录后才能操作的接口时,一并传给后端(即本身要传的参数在多加这两个字段userId和sgin)   let sign ; // 获取用户ID let userId ...

    首先,引入crypto-js  或者测试直接使用下面的(用浏览器打开下面链接,复制到JS文件里,用script src的方式引到HTML中,避免链接失效)

     

    <script src="https://yiyouqi.oss-cn-shanghai.aliyuncs.com/cdn/rsa/RSA.js"></script>

    <script src="https://yiyouqi.oss-cn-shanghai.aliyuncs.com/cdn/crypto-js/build/components/core-min.js"></script>

    <script src="https://yiyouqi.oss-cn-shanghai.aliyuncs.com/cdn/crypto-js/build/rollups/aes.js"></script>

    首先获取公钥,然后对密码进行加密,然后把账号密码发给后端,成功后,后端返回Token,该Token 是加密过的,需要用aes进行解密。解密后对Token 进行Url签名。(把Token和Id放在sessionStorage或者localStorage里避免重复的去后端取)

    登录代码如下:

     

    //请求登录接口

    let myajax = $.ajax({

    url: getkeyApi,

    timeout: 20000,

    type: "post",

    cache: false,

    dataType: "json",

    success: function (data) {//获取公钥

    if (data.Result) {

    setMaxDigits(131);

    const key = new RSAKeyPair(data.Exponent, "", data.Modulus);

    const username = obj.field.username;

    const password = obj.field.password;

    const encrypetedPassword = encryptedString(key, base64encode(

    password));

    $.ajax({

    url: loginApi,

    timeout: 20000,

    type: "post",

    data: {

    userName: username,

    passWord: encrypetedPassword

    },

    success: function (res) {//登录成功的回调,获取Token存入sessionStorage

    let _token = res.Data.AccessToken

    if (res.Result) {

    sessionStorage.setItem("Id",res.Data.Id)

    // aes解密

    var WfAesUtils = {

    _KEY: "12345678900000001234567890000000", //32位

    _IV: "1234567890000000", //16位

    Decrypt: function (str) {

    var key = CryptoJS.enc.Utf8

    .parse(this._KEY);

    var iv = CryptoJS.enc.Utf8.parse(

    this._IV);

    var encryptedHexStr =

    CryptoJS.enc.Hex.parse(

    str);

    var srcs = CryptoJS.enc.Base64.stringify(

    encryptedHexStr);

    var decrypt = CryptoJS.AES.decrypt(

    srcs, key, {

    iv: iv,

    mode: CryptoJS.mode

    .CBC,

    padding: CryptoJS

    .pad.Pkcs7

    });

    var decryptedStr = decrypt.toString(

    CryptoJS.enc.Utf8);

    return decryptedStr.toString();

    }

    }

    let _reToken = WfAesUtils.Decrypt(_token);

     

    //请求成功后,写入 access_token

    layui.data(layui.setter.tableName, {

    key: setter.request.tokenName,

    value: _reToken

    });

     

    //登入成功的提示与跳转

    layer.msg('登录成功', {

    offset: '15px',

    icon: 1,

    time: 1000

    }, function () {

    location.hash = search.redirect ?

    decodeURIComponent(search.redirect) :

    '/';

     

    });

    } else {

    layer.msg('登录失败');

    }

    },

    error: function (jqXHR, status, ex) {

    layer.msg('登录失败');

    },

    beforeSend: function (jqXHR) {

    layer.load(1);

    },

    complete: function (XMLHttpRequest, status) {

    layer.closeAll('loading');

    if (status === 'timeout') {

    myajax.abort();

    layer.msg('请求超时');

    }

    }

    });

    } else {

    layer.msg('登录失败');

    }

    },

    error: function (jqXHR, status, ex) {

    layer.msg('登录失败');

    },

    complete: function (XMLHttpRequest, status) {

    if (status === 'timeout') {

    myajax.abort();

    layer.msg('请求超时');

    }

    }

    });

     

    url签名:首先获取Id和Token 在Token前面加上接口地址(/ControllerName/ActionName不懂的小伙伴问后端)

    然后对字符串拼接后的Token进行sha256加密,加密后,在操作需要登录后才能操作的接口时,一并传给后端(即本身要传的参数在多加这两个字段userId和sgin)

     

    let sign ;

    //获取用户ID

    let userId = sessionStorage.getItem('Id')

    //获取token

    let layuiAdmin = localStorage.getItem('layuiAdmin')

    let _layuiAdmin = JSON.parse(layuiAdmin)

    let token = _layuiAdmin.AccessToken

     

    let sign_url = '/ControllerName/ActionName' + token

    let sign_list = sha256(sign_url)

    sign = sign_list

     

    对于登录后的接口操作都要带上userId 和 Sign

    如果本文对您有帮助请点个赞!

    Thanks♪(・ω・)ノ

     

     

    展开全文
  • token登录验证

    2018-01-03 17:51:00
    http://www.cnblogs.com/linjiqin/p/4552727.html 转载于:https://www.cnblogs.com/SharkChilli/p/8184962.html

    http://www.cnblogs.com/linjiqin/p/4552727.html

    转载于:https://www.cnblogs.com/SharkChilli/p/8184962.html

    展开全文
  • token登录验证机制

    千次阅读 2019-08-14 16:39:48
    看一张图解释 token登录验证机制 !!!!!! token步骤(vue) 第一次登录的时候,前端调后端的登陆接口,发送用户名和密码 后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token 前端拿到token,将...
    jwt: json web token
    • 数据 前端 秘钥
    • 前端 请求数据的时候。 需要通过秘钥生成命令令牌。
    Token

    token是oAuth Token,提供的是认证和授权,认证针对用户,授权是针对App,目的就是让某APP有权访问某用户的的信息。Token是唯一的,token不能转移到其他的App,也不能转到其他用户上。(适用app)

    看一张图解释 token登录验证机制 !!!!!!
    在这里插入图片描述

    token步骤(vue)
    1. 第一次登录的时候,前端调后端的登陆接口,发送用户名和密码
    2. 后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token
    3. 前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面
    4. 前端每次跳转路由,就判断 localStroage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面
    5. 每次调后端接口,都要在请求头中加token
    6. 后端判断请求头中有无token,有token,就拿到token并验证token,验证成功就返回数据,验证失败(例如:token过期)就返回401,请求头中没有token也返回401
    7. 如果前端拿到状态码为401,就清除token信息并跳转到登录页面
    展开全文
  • Java Token登录验证 生成解析Token

    千次阅读 2020-06-05 22:32:59
    Java Token登录验证 使用jjwt生成和解析JWT java基于token验证之登陆验证 等 什么是Token? 我的理解来说 token就是你访问服务器的口令,只要token合法,正确,你就能获取到后端数据 当用户第一次登陆后,用户名密码...

    借鉴参考

    Java Token登录验证 使用jjwt生成和解析JWT
    java基于token验证之登陆验证

    什么是Token?

    我的理解来说 token就是你访问服务器的口令,只要token合法,正确,你就能获取到后端数据

    当用户第一次登陆后,用户名密码验证成功后,服务器会生成一个token,把token返回到客户端,一般token都是储存在浏览器的localStorage 或 cookies中,存在localStorage的token需要通过js,将token添加到http请求头中,下次再访问服务器,就不需要用户名密码了,只要带上token,服务器验证token的合法性后,就能访问后端资源了。是不是觉的很方便

    添加依赖

    我的项目是用gradle构建的,maven添加依赖可以百度一下
    implementation (“io.jsonwebtoken:jjwt:0.9.0”)
    implementation (“com.auth0:java-jwt:3.4.0”)

    我前端是vue.js 用了element ui 三方库,servlet,mybatis

    参考了链接

    public class TokenSign {
        /**
         * @author
         * 设置过期时间 1小时钟 为了方便测试
         * 设置Token密匙 最好长一点
         */
        private static final long EXPIRE_TIME= 60 * 60 * 1000;
        private static final String TOKEN_SECRET="Token";
        /**
         * 产生token
         * @param useName
         * @param userId
         * @return
         */
        public static String Sign(String useName , long userId){
            try{
            	//这里将useName 和 userId 存入了Token,在下面的解析中,也会有解析的方法可以获取到Token里面的数据
                //Token过期的时间 
                Date date = new Date(System.currentTimeMillis()+EXPIRE_TIME);
                System.out.println("date"+date);
                Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
    
                //设置头部信息
                Map<String,Object> header = new HashMap<>();
                header.put("typ","JWT");
                header.put("alg","HS256");
    
                //附带username和userid信息,存储到token中,生成签名
                return JWT.create()
                        .withHeader(header)
    
                        //存储自己想要留存给客户端浏览器的内容
                        .withClaim("userName",useName)
                        .withClaim("userId",userId)
                        .withExpiresAt(date)
                        .sign(algorithm);
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * token校验是否正确
         * @param token
         * @return
         */
    
        public static boolean verify(String token){
            try{
                Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
    
                JWTVerifier verifier = JWT.require(algorithm).build();
    
                DecodedJWT decodedJWT = verifier.verify(token);
    
                return true;
    
            }catch (Exception e){
                System.out.println("Token超时,需要重新登录");
            }
    
            return false;
        }
    
        /**
         * 获取token中信息 userName
         * @param token
         * @return
         */
    
        public static String getUsername(String token){
            try {
                DecodedJWT jwt = JWT.decode(token);
                return jwt.getClaim("userName").asString();
    
            }catch (JWTDecodeException e){
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 获取token中信息 userId
         * @param token
         * @return
         */
    
        public static Long getUserId(String token){
            try{
                DecodedJWT jwt = JWT.decode(token);
                return jwt.getClaim("userId").asLong();
            }catch (JWTDecodeException e){
                e.printStackTrace();
            }
            return null;
        }
    
    }
    

    前端收到的数据
    Response中的Token
    储存到localStorage中的token
    储存到localStorage中的token

    请求头添加Token

    在main.js 中添加拦截器,添加请求头在这里插入图片描述

    axios.interceptors.request.use(config => {
    	// 为请求头添加Authorization字段为服务端返回的token
    	config.headers.Authorization = localStorage.getItem('token')
    	return config
      })
    

    这样的话请求头添加了token
    在这里插入图片描述

    过滤器

    @WebFilter注解详情
    这里的urlPatterns填路径
    如果我的 @WebServlet("/Jwt/JwtListTest") 是这样的 WebServlet就能过滤下掉
    如果我的 @WebServlet("/sadasda/JwtListTest") 是这样的 WebServlet就不能过滤 TheInterceptor就不会执行

    @WebFilter(filterName = "TheInterceptor",urlPatterns = {"/jwt/*"})
    public class TheInterceptor implements Filter {
        //初始化
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("Filter初始化");
        }
    
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("doFilter");
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse resp = (HttpServletResponse) response;
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=utf-8");
            ObjectNode objectNode=new ObjectNode(JsonNodeFactory.instance); //初始化json对象
            PrintWriter out = response.getWriter();
    
            String url = req.getServletPath();
    
    		//获取请求头Authorization字段的数据
            String token = req.getHeader("Authorization");
    
            boolean result = false;
            /**
             * 1001 token不存在,先登录
             * 1002 token存在,但是token不合法
             *
             * 2000 用户名或密码错误
             * 2999 登陆成功
             * 2998 注销登录成功
             * 2997 注销登录失败
             *
             * 3000 用户注册失败
             * 3001 用户名重复
             * 3999 用户注册成功
             *
             * 3002 用户信息更新成功
             * 3998 用户信息更新失败
             */
            //如果url 复合 这些,直接放行,不用验证token
            if (
                    "/jwt/JwtLogin".equalsIgnoreCase(url) ||
                            "/jwt/JwtRegister".equalsIgnoreCase(url) ||
                                "/jwt/JwtOrderDetail".equalsIgnoreCase(url) ||
                                        "/Jwt/JwtListTest".equalsIgnoreCase(url)){
                System.out.println("if语句执行了");
                chain.doFilter(request, response);//这是放行的语句
            }else {
                /**
                 * 如果不是,登录界面,注销界面,注册界面 则执行以下语句
                 * 如果 要去商品界面,购物车界面等需要,登录状态的界面,
                 * 如果token==null 说明 没有登录,数据返回前端,让前端进行跳转到登录界面登录
                 * 如果token !== null 先进行token合法性的验证
                 * 如果token 不合法,数据返回前端,让前端进行跳转到登录界面登录,合法则让请求,去到相应界面
                 */
                if (token == null){  //如果token存在 则执行放行
                    System.out.println("token不存在");
                    objectNode.put("status",1001);
                    out.println(objectNode);
                    out.close();
                }else {
                    //如果是不空,说明登陆过,先判断token合法性(也包括了对token时效性的判断)
                    result = TokenSign.verify(token);
                    if (result){
                        System.out.println("token合法");
                        try {
                            chain.doFilter(request, response);
                        }catch (Exception e){
                            System.out.println("chain.doFilter报错");
                            e.printStackTrace();
                        }
                        System.out.println("token合法1");
                    }else {
                        System.out.println("token不合法");
                        objectNode.put("status",1002);
                        out.println(objectNode);
                        out.close();
                    }
    
                }
            }
    
        }
    
        @Override
        public void destroy() {
            System.out.println("Filter摧毁");
        }
    }
    

    这篇博客借鉴参考很多,主要为了是加深自己的记忆,希望各位大牛不要见笑,如果有错误请告知

    基于Token的WEB后台认证机制
    Java实现基于token认证

    展开全文
  • flask token 登录验证

    2020-12-23 10:00:01
    flask token 登录验证 视频 https://www.youtube.com/watch?v=J5bIPtEbS0Q 代码 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : flask token 实例 @File : jwt_token.py @Time : 2020-12-22 17:...
  • token登录验证机制 前几天研究了一下springboot security的一个项目,分析了源码,里面就是在使用token的登录验证机制,主要使用过程如上图,登录后根据security的安全算法生成一个唯一的token值(基于JWT),然后...
  • VUE实现token登录验证

    千次阅读 多人点赞 2019-04-01 17:47:14
    实现这个登录功能的过程真是一波三折,中途出现了bug,整了两三天才解决了问题,心力交瘁,简直一个...现在详细地记录一下实现token登录验证的步骤,以防以后再犯错 1.封装store对token的操作方法 首先在src目录下...
  • vue项目token登录验证 Token是在客户端频繁向服务器发送请求,服务器需要频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码是否正确,并作出相应提示,在这样的背景下,toekn技术便营运而生。 什么是...
  • 基于spring-boot的token登录验证1.什么是token2.token是干什么的3.token的组成基于boot的token登录好了,到这里token的简单登录就完成了,当然,我也阅读了几篇大佬的token文章,谢谢你们,现在我将我学到的及自己理解的...
  • java token登录验证 https://www.cnblogs.com/java-jun-world2099/p/9146143.html 需要jar包jackson-annotations-2.4.0.jar、jackson-core-2.4.0.jar、jackson-databind-2.4.0.jar、jjwt-0.6.0.jar
  • 实现原理 [不知道对不对] ...后端接收生成对象(user) ...后端再次接收请求的时候从header里面获取token,从redis验证取出对象进行操作 java实现 实体类user,因为要存到redis就要序列化,所以要对user做可序列化操
  • SpringBoot 实现token登录验证

    千次阅读 2018-10-11 11:02:29
    2.重写preHandler方法,返回类型为布尔型,true代表放行,false代表不放行,获取Http请求的请求头,验证token是否存在、有效,如果有效则将token放入线程本地变量保管 3.重写afterCompletion方法 清除线程本地变量...
  • 用户第一次成功登录后,服务器会针对这个用户生成一个token,用来标识这个用用户,并将生成的token返回给客户端,以后客户端只需要带着token来访问即可,不需要使用账号和密码来。 通过JWT生成Token JWT(JSON Web ...
  • Token认证登录(原创有效) 大体认证过程: 1.用户通过用户名和密码发送请求。 2.服务器端程序验证。 3.服务器端程序返回一个带签名的token 给客户端。 4.客户端储存token,并且每次访问API都携带Token到服务器端的。...
  • 一张图理解 token登录验证

    万次阅读 2018-08-03 08:51:54
    token的生成一般是采用uuid保证唯一性,当用户登录时为其生成唯一的token,存储一般保存在数据库中。token过期时间采用把token二次保存在cookie或session里面,根据cookie和session的过期时间去维护to...
  • Token如何实现登录验证:登录时服务器接收用户名密码,如果正确就生成一个Token返回前端,以后每次需要登录才能发起的请求,要在请求头带服务器之前给的Token,正确才能访问。 遇到的几个头大问题:1.在Service层忘...
  • SpringBoot Token 登录验证机制图解

    千次阅读 2018-09-04 12:19:58
    登录验证机制图解
  • 上图是微信开发文档提供的图。 最近开发一款小程序,看了许久的微信文档,这里来记录一下其中的...前端以后每次请求都会携带该自定义登录状态,后端进行登录状态的判断,正常就返回业务数据,否则重新登陆,获取新的.
  • 前端请求接口 token登录验证

    千次阅读 2019-08-13 10:52:46
    登录组件登录函数 methods: { userLogin () { this.axios({ method: 'post', url: 'userLogin', data: this.loginData }).then(res => { console.log('登录成功') // 登录成功存储用户信息到本地...
  • 架构-token登录验证

    2019-04-15 16:37:36
  • Android开发Token登录验证只需三步

    千次阅读 2019-09-09 15:23:39
    学习过程种遇到的token验证问题,解决方法 1.首先先去解析后台返回的token 看有没有拿到返回的token参数 2.如果有就保存到本地 3.再把保存到本地的token添加到请求头 后台会把不需要token验证的过滤掉 比如首页的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,281
精华内容 1,712
关键字:

token登录验证