页面跳转统一登录实现

        从现在开始打算记录一下学到的知识点,希望能坚持下去,保留一下自己生活的轨迹。技术还算个小白阶段。

        俩个系统之间实现跳转,必须要确定账号之间对应的联系。

跳转方式

        1.采用直接拼接到url进行实现-这种方式是拼接相关字段到另一个系统。直接触发另一个系统的登录。但是不好的就是安全性不强。不管账号密码是否加密,直接在url中显示别人拿到了以后肯定是能直接通过链接登录到这个账号的。

        2.后台获取token认证。采用对方系统的接口进行获取账号对应的token进行跳转。但是token的获取在前端一般存在跨域问题。(后面会说解决方法)在后端调用接口直接就可以获取。对方系统必须有对url拼接token验证的方法。我自己写的只有前端拦截器进行储存校验,还不知道其他系统是怎么实现的,应该也是进行的拦截判断。

        3.自定义拼接判断的字段。首先登录其他系统查看应用中的存储。确认用来识别用户登录和登录信息的字段后(可以删除刷新页面进行判断,登录掉了就是这个字段了),然后查看登录接口的返回值。一般是返回token或者返回token后调取加密接口进行储存。字段对应上直接在url上拼接来就行了。不过要在另一个系统进行url拦截判断。判断后,设置到相应的储存字段上就行了。然后设置一下这个字段的监督事件。

访问接口问题

        1.前面说的前端访问就主要是一个跨域问题----cros报错。处理方式一般都是使用nglinx代理。就是通过nglinx监督一个链接后,转发到另一个链接。从而实现用nglinx访问接口。

        2.就是采用后端进行访问了。

                设置请求头方法   

  // 入参定义
        Map<String, Object> map = new HashMap<String, Object>();
        // 假如cookie需要传token值
        String token = "token值";
        HttpRequest post = HttpUtil
                .createPost(WebserviceUtil.oaWebService + oa.getAddress());
        HttpCookie cookie = new HttpCookie("ecology_JSessionid", oa.getOaCookie());
        post.cookie(cookie);
        RequestContextHolder.getRequestAttributes())
        HttpResponse execute = post.execute();

                      设置请求体方法和设置请求格式

 URL url = new URL("http://localhost/dev-api/login");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        String requestBody = "{\"code\":\"0\", \"password\":\"admin123\",\"username\":\"admin\", \"uuid\":\"a522d20428a64a01a234c8eae1a4dc10\"}";
        OutputStream outputStream = connection.getOutputStream();
        outputStream.write(requestBody.getBytes());
        outputStream.flush();
        outputStream.close();

        int responseCode = connection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            System.out.println("Response: " + response.toString());
            JSONObject jsonObject =  JSON.parseObject(response.toString());
            String result= (String) jsonObject.get("token");
            return result;
        } else {
            System.out.println("Request failed with response code: " + responseCode);
        }
        connection.disconnect();
        return null;
    }

        获取其他接口Cookie可以使用访问url在进行获取的方式,这是是通过url(不是接口)地址进行获取的,并且url地址要携带验证信息保证能ping通。

HttpUtil.createGet(url).execute().getCookie("ecology_JSessionid").getValue();

前端拦截url

ainAppRouter.beforeEach((to, from, next) => {   // to中是当前的地址
  console.log(to.query.MICRO_orgMain_user_token)
  if (to.query.MICRO_orgMain_user_token) {
    utils.setStorage("user_token", to.query.MICRO_orgMain_user_token);
  };
}

           这样就能直接携带token进行访问,由访问系统拦截,添加到自己的浏览器存储中进行验证。

        本次还使用了若依的一些模块进行辅助,比如从库的使用,若依工具类获取当前账户的方法(通过认证信息中获取用户信息)。

        总结: 通过对接工作,要积极与对接平台负责人进行联系。确定账户绑定方式,访问对接平台接口的认证方式与携带认证访问的相关接口。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值