若依集成积木就不说了官网有ruoyi vue版集成积木报表 · JimuReport 积木报表 · 看云 (jeecg.com)​​​​​​​

考虑到用若依的一般都是刚成立的公司,没有自己公司的框架,所以一般都是前后端都干,我这里前后端都搞上,让你们快速搞完摸鱼去,代码写的如果不好多担待。

如果这篇文章对你有帮助希望点个赞,这样我的分享才会有乐趣!谢谢大家!

接下来是积木进行token传递的集成过积木主要有两个接口需要进行token传递

第一次写博客不好之处的多担待 

1. /jmreport/list  查看积木列表

2. /jmreport/view/* 查看积木报表详情

后端

主要是后端的

一、首先说第一个 /jmreport/list 接口,也就是下面这个页面

 

 1.直接创建 JimuReportTokenService 实现 JmReportTokenServiceI接口就行了

 2.实现

package com.ruoyi.framework.web.service;

import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.TokenUtils;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * @author dzh
 * @version 1.0
 * @date 2022/7/26 11:06
 */
@Component
public class JimuReportTokenService implements JmReportTokenServiceI {
    @Autowired
    TokenService tokenService;

    @Override
    public String getUsername(String token) {
        LoginUser loginUser = tokenService.getLoginUser(token);
        return loginUser.getUsername();
    }

    @Override
    public Boolean verifyToken(String token) {
        LoginUser loginUser = tokenService.getLoginUser(token);
        if(StringUtils.isNotNull(loginUser)){
            tokenService.verifyToken(loginUser);
            return true;
        }
        return false;
    }

    @Override
    public String getToken(HttpServletRequest request) {
        return TokenUtils.getTokenByRequest(request);
    }

    @Override
    public Map<String, Object> getUserInfo(String token) {
        return null;
    }
}

 3.TokenUtils

/**
 * @author dzh
 * @version 1.0
 * @date 2022/7/26 14:18
 */
public class TokenUtils {

    /**
     * 获取 request 里传递的 token
     *
     * @param request
     * @return
     */
    public static String getTokenByRequest(HttpServletRequest request) {
        String parameter = request.getParameter("token");
        String header = request.getHeader("token");
        if (parameter == null && header == null) {
            parameter = request.getHeader("Authorization");
        }
        return parameter != null ? parameter : header;
    }
}

 

4. getLoginUser方法重载了一个

    /**
     * 获取用户身份信息
     *
     * @return 用户信息
     */
    public LoginUser getLoginUser(String token)
    {
        if(StringUtils.isNull(token)){
            return null;
        }
        token = token.replace(Constants.TOKEN_PREFIX, "");

        if (StringUtils.isNotEmpty(token))
        {
            try
            {
                Claims claims = parseToken(token);
                // 解析对应的权限以及用户信息
                String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
                String userKey = getTokenKey(uuid);
                LoginUser user = redisCache.getCacheObject(userKey);
                return user;
            }
            catch (Exception e)
            {
            }
        }
        return null;
    }

4.这样子就可以了再次访问接口时如果不带token时就会报错

5.成功案例 /jmreport/list?token=#{token}

二 /jmreport/view/* 查看积木报表详情

这个需要做一个拦截器,监听/jmreport/view/*接口,必须携带token

1.定义拦截器

代码段

package com.ruoyi.framework.interceptor;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author dzh
 * @version 1.0
 * @date 2022/7/26 16:28
 */
@Component
public class JimuInterceptor implements HandlerInterceptor {

    @Autowired
    private TokenService tokenService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
        response.setContentType("text/html; charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        String token = request.getParameter("token");
        LoginUser loginUser = tokenService.getLoginUser(token);

        if (loginUser != null) {
            return true;
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", 200);
        jsonObject.put("msg", "参数错误或无权访问数据");
        response.getWriter().println(jsonObject);
        return false;
    }
}

2.进行接口拦截

 完成,这样访问/jmreport/view 也需要token了

前端

接下来主要是前端的

我这里是放到菜单中了并没有另外开一个网页

1.搞一个菜单

 2.代码段1

<template>
  <i-frame :src="openUrl" />
</template>

<script>
import { getToken } from '@/utils/auth'
import { indexUrl } from '@/api/ruoyi/jimu/jimu'
import iFrame from "@/components/iFrame/index";

export default {
  name: 'Jimu',
  components: { iFrame },
  data() {
    return {
      openUrl: ''
    }
  },
  created() {
    indexUrl().then(res => {
      this.openUrl = res + '?token=' + getToken()
    })
  }
}
</script>

<style scoped>

</style>

3.代码段2

import request from "@/utils/request";
// 首页
export function indexUrl() {
  return request({
    url: "/ruoyi/jimu/index",
    method: "get"
  });
}

4.后端代码段,其实就是返回积木列表的访问地址,获取当前服务器I拼接了一下

/**
 * @author dzh
 * @version 1.0
 * @date 2022/7/26 11:02
 */
@RestController
@RequestMapping("/ruoyi/jimu")
public class JimuController {
    @Autowired
    Environment environment;

    @GetMapping("/index")
    public String index(){
        String hostIp = IpUtils.getHostIp();
        String property = environment.getProperty("ruoyi.reportUrl");
        String format = String.format(property, hostIp);
        return format+"/jmreport/list";
    }
}

5.application.yml

完成,不管怎么访问都需要携带带token的,摸鱼去吧!

如果这篇文章对你有帮助希望点个赞,这样我的分享才会有乐趣!谢谢大家!

Logo

快速构建 Web 应用程序

更多推荐