当前位置:   article > 正文

js实现拦截器进行请求处理_js拦截器

js拦截器

js实现拦截器

因为公司需求,在前端请求接口的过程中,我们的某个接口参数必须经过一次加密,因为用到这个接口的地方有点多,如果在对应的业务js文件中一个一个改,那工作量就有点大了,幸好这些页面中都有使用到一个公共js,那么我们直接在里面通过ajaxSetup实现类似拦截器的效果。

​ 废话不多说,直接上代码。需要注意,我的后端是用的java哦,解码也是用的java。

公共js

	//其他逻辑处理代码省略...

	//字符串转base64
    function getEncode64(str){
        // 用这种方式可避免中文乱码
        return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
            function toSolidBytes(match, p1) {
                return String.fromCharCode('0x' + p1);
            }));
    }
	// 通过ajaxSetup在请求发送前对参数进行加密处理
    $.ajaxSetup({
        beforeSend: function (xhr) {
            if (arguments[1].type === "GET") {
                var data = arguments[1].url.split("?");
                var ip = data[0];
                var params = data[1];
                var paramsJson = {};
                if (params) {
                    // 解析参数
                    params.replace(/([^?&]+)=([^?&]+)/g, function (s, v, k) {
                        paramsJson[v] = decodeURIComponent(k);
                        return k + '=' + v;
                    });
                    if ("content" in paramsJson) {
                        var content = getEncode64(paramsJson.content);
                        paramsJson.content = content;
                        var paramsString = "";
                        //将json格式转化为urlcode编码格式的数据
                        for (var key in paramsJson) {
                            paramsString = paramsString + key + "=" + encodeURIComponent(paramsJson[key]) + "&";
                        }
                        paramsString.substr(0, paramsString.length - 1);
                        //修改参数
                        arguments[1].url = ip + "?" + paramsString;
                    }
                }
            } else {
                var params = arguments[1].data;
                //将urlcode编码转化为json
                if (params) {
                    var paramsJson = {};
                    // 解析参数
                    params.replace(/([^?&]+)=([^?&]+)/g, function (s, v, k) {
                        paramsJson[v] = decodeURIComponent(k);
                        return k + '=' + v;
                    });
                    if ("content" in paramsJson) {
                        var content = getEncode64(paramsJson.content);
                        paramsJson.content = content;
                        var paramsString = "";
                        //将json格式转化为urlcode编码格式的数据
                        for (var key in paramsJson) {
                            paramsString = paramsString + key + "=" + encodeURIComponent(paramsJson[key]) + "&";
                        }
                        paramsString.substr(0, paramsString.length - 1);
                        //修改参数
                        arguments[1].data = paramsString;
                    }
                }
            }
        }
    });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

业务js

	// 其他业务代码省略...
	function test() {
        $.ajax({
            type: "POST",
            url: "http://localhost:8083/testController/test",
            data: {content: "奥利给"},
            success: function (data) {
                console.log(data);
            },
            //失败回调
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                //查看错误信息

            }
        });
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

java后端接口

    @PostMapping(value = "test")
    @ApiOperation(value = "测试接口")
    public void test(String content) {
        boolean isBase = Base64Util.isFromBase64(content);
        if(isBase){
            String test = Base64Util.getFromBase64(content);
            log.info("获取到字符串:"+test);
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Base64Util

import java.io.UnsupportedEncodingException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Base64Util {
    //加密
    public static String getBase64(String str){
        byte[] b=null;
        String s=null;
        try {
            b = str.getBytes("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        if(b!=null){
            s=new BASE64Encoder().encode(b);
        }
        return s;
    }
    // 解密
    public static String getFromBase64(String s) {
        byte[] b = null;
        String result = null;
        if (s != null) {
            BASE64Decoder decoder = new BASE64Decoder();
            try {
                b = decoder.decodeBuffer(s);
                result = new String(b, "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    // 通过正则表达式判断是否base64加密过的字符串
    public static boolean isFromBase64(String inputStr) {
        String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
        Boolean isLegal = inputStr.matches(base64Pattern);
        if (!isLegal) {
            return false;
        }
        return true;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/969382
推荐阅读
相关标签
  

闽ICP备14008679号