若依前后分离版集成积木报表进行token传递

若依分离板集成积木报表就不说了需要的请移步:若依前后分离版集成积木报表-CSDN博客

考虑到前端摸鱼不干活,所以一般都是前后端都干,我这里前后端都搞上,你们直接抄,抄完接着去摸鱼,代码不美观,轻喷

一、需要进行token传递的接口

集成积木主要有两个接口需要进行token传递

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

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

二、后端配置:
1、创建 JimuReportTokenService 实现 JmReportTokenServiceI接口,文件路径:/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/JimuReportTokenService.java
JimuReportTokenService.java文件内容,直接C+V即可
 

package com.ruoyi.framework.web.service;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;

import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.tool.TokenUtils;

import lombok.AllArgsConstructor;
/**
 * 
* @ClassName: JimuReportTokenService
* @author fzz
*
 */
@Component
@AllArgsConstructor
public class JimuReportTokenService implements JmReportTokenServiceI {
	private final TokenService tokenService;

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

	@Override
	public String getToken() {
		return JmReportTokenServiceI.super.getToken();
	}

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

	@Override
	public String[] getRoles(String arg0) {
        return new String[0];
	}

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

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

	@Override
	public HttpHeaders customApiHeader() {
		return JmReportTokenServiceI.super.customApiHeader();
	}

	@Override
	public String getTenantId() {
		return JmReportTokenServiceI.super.getTenantId();
	}

}

2、添加tool包, 创建TokenUtils.java ,文件路径:/ruoyi-framework/src/main/java/com/ruoyi/framework/web/tool/TokenUtils.java

文件内容,直接C+V即可
 

package com.ruoyi.framework.web.tool;

import javax.servlet.http.HttpServletRequest;

import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.service.TokenService;

import lombok.AllArgsConstructor;
 
/**
 *  
* @ClassName: TokenUtils
* @author fzz
*
 */
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;
    }
}

3、TokenService.java文件重载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;
	}

  OK,现在如果再次访问/jmreport/list接口查看积木列表时如果不带token时就会报错
4、定义拦截器

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

创建JimuInterceptor.java文件,路径:/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/JimuInterceptor.java

文件内容,直接复制
 

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 lombok.AllArgsConstructor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * 
* @ClassName: JimuInterceptor
* @Description: 监听/jmreport/view/*接口,必须携带token
* @author fzz
*
 */
@Component
@AllArgsConstructor
public class JimuInterceptor implements HandlerInterceptor {
    private final 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;
    }
}

5、对接口进行拦截
打开ResourcesConfig.java文件,路径:/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
找到addInterceptors方法,添加registry.addInterceptor(jimuInterceptor).addPathPatterns("/jmreport/view/*");
 

	/**
	 * 自定义拦截规则
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
        //新增自定义规则
        registry.addInterceptor(jimuInterceptor).addPathPatterns("/jmreport/view/*");
	}

OK,这样再去访问/jmreport/view 就会也需要token了,如果不带token时就会报错

后端配置到此结束,接下来是前端配置
三、前端配置:
1.内嵌菜单,之前有写过,需要的移步:若依前后分离版集成积木报表嵌入菜单-CSDN博客

访问项目就OK了,如果还是提示需要token的话 ,请打开前端项目:\ruoyi-ui\src\views\system\jeecg\index.vue找到indexUrl,查看是否添加了token,如果没添加 在这里添加上即可,代码如下

  created() {
    indexUrl().then(res => {
      this.src =  res + '?token=' + getToken()
    })  

  },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899583.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【景观生态学实验】实验一 ArcGIS地理数据处理及制图基础

实验目的 1.掌握ArcGIS软件基本操作&#xff1a;通过实验操作与学习&#xff0c;熟练掌握ArcGIS软件相关的基本操作&#xff0c;包括界面熟悉、工具栏使用、数据的加载和保存、基本数据处理操作等; 2.掌握如何使用ArcGIS进行影像拼接及裁剪&#xff1a;通过实验操作与学习&am…

ABAP SMARTFORMS(2)

1、表单接口 方法一&#xff1a;导入结构、内表&#xff0c;给全局定义传入结构体 方法二&#xff1a;只关联表&#xff0c;不关联结构,给全局定义传入结构体 GW_XYXX存的表头信息 GW_XYKQ存考勤信息,表中的每一行 初始化学员信息表的第一条数据作为表头 2、创建表头模板 该…

x-cmd mod | x sd - 搭配 fzf 实时预览文本替换效果,打造更直观高效的编辑体验

目录 介绍子命令使用案例 介绍 sd&#xff08;search & displace&#xff09;是一种查找和替换文本工具&#xff0c;使用常见的正则表达式语法&#xff0c;类似于 sed&#xff0c;但专注于替换操作&#xff0c;从而使用起来更直观、更易读。 该模块主要通过 fzf 以交互方式…

单片机STC8H8K64U开发板_RA6809开发板 驱动彩屏显示

单片机STC8H8K64U开发板&#xff0c;型号RT8H8K001 预留Type C接口&#xff0c;可供电SWD下载&#xff1a; RA6809开发板&#xff0c;型号RT6809CNN01 预留Type C接口供电&#xff0c;预留MCU接口、电容触摸屏接口、液晶屏接口&#xff1a; 双臂合一&#xff0c;驱动和控…

Error in cpuinfo: prctl(PR_SVE_GET_VL) failed 错误记录

今天在一台新机器上面搭建安装环境的时候出现了上面的错误&#xff0c;直观感觉是跟py-cpuinfo这个模块有关系的。 Error in cpuinfo: prctl(PR_SVE_GET_VL) failed 错误通常与 ARM 架构上的 CPU 信息库&#xff08;如 cpuinfo&#xff09;相关&#xff0c;特别是在尝试获取可扩…

web pdf 图片拖动图片合成

web pdf 图片拖动图片合成 先看效果 前端 合成后 1.原理 以前写过相关的帖子&#xff0c;使用的是 canva 但是这次换了一个思路使用的是图片 1.先把pdf转成图片 2.把pdf图片和目标图片传到浏览器 3.原理就和图片合成一样了。见上一篇帖子 4.后端也一样只不过这次是将位置和pd…

IntelliJ IDEA 常用快捷键详解与自定义修改方法

目录 前言1. IntelliJ IDEA 常用快捷键1.1 代码编辑快捷键1.2 代码导航快捷键1.3 重构快捷键1.4 调试快捷键 2. 如何修改 IntelliJ IDEA 快捷键2.1 打开快捷键设置界面2.2 查找和修改快捷键2.3 导入和导出快捷键配置 结语 前言 IntelliJ IDEA 是一款广受开发者欢迎的集成开发环…

vue2之混入(mixin)

Vue 2 的混入&#xff08;Mixin&#xff09;是一种在 Vue 组件中分发可复用功能的方式。通过混入&#xff0c;你可以将一些通用的组件选项&#xff08;如数据、方法、计算属性、生命周期钩子等&#xff09;提取到一个混入对象中&#xff0c;并在多个组件中重用这些选项&#xf…

基于Python大数据的招聘数据分析及大屏可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

2024软考-《软件设计师》-易混淆知识点总结(1~6章)

一、计算机组成与体系结构 1.1、原码、反码、补码、移码的运算 原码&#xff1a;最高位表示符号位&#xff0c;其余低位表示数值的绝对值&#xff08;0表示正数&#xff0c;1表示负数&#xff09; 反码&#xff1a;正数的反码与原码相同&#xff0c;负数的反码是其绝对值按位…

基于ESP32的RGB便携式视频灯

基于ESP32的RGB便携式视频灯 拥有一套能够满足个人需求的灯光设备至关重要。市面上的RGB视频灯虽然功能强大&#xff0c;但往往价格不菲。我制作的这款灯是20W RGB便携式视频灯不仅满足了我的需求&#xff0c;而且成本仅为市售产品的三分之一。接下来&#xff0c;我将详细介绍这…

大模型开发实战1-QuickStart

0. 关于大模型和模型选择 由于OpenAI的ChatGPT流行&#xff0c;AI技术在大模型技术的赋能下高速发展&#xff0c;特别是2023年至今&#xff0c;国内的AI技术发展更是前所未有的景象&#xff0c;各大公司争相发布自己的大模型&#xff0c;包括百度文心一言&#xff0c;阿里同义…

正版CST电磁仿真软件:保障创新与合规的基石

在当今快速发展的科技时代&#xff0c;电磁仿真技术对于电子产品的设计、测试和优化至关重要。CST电磁仿真软件以其强大的功能和广泛的应用领域&#xff0c;成为众多企业和研究机构不可或缺的工具。然而&#xff0c;在选择使用CST软件时&#xff0c;确保使用正版软件不仅是对知…

【C++】红黑树的底层原理以及实现

#1024程序员节 | 征文# 个人主页&#xff1a;夜晚中的人海 文章目录 ⭐前言&#x1f686;一、红黑树的概念&#x1f3e0;二、红黑树的规则&#x1f384;三、红黑树的效率&#x1f3a1;四、红黑树的实现1. 基本框架2. 插入操作• 变色• 单旋 变色• 双旋 变色 3. 查找操作4. …

玄机平台-应急响应-webshell查杀

首先xshell连接 然后进入/var/www/html目录中&#xff0c;将文件变成压缩包 cd /var/www/html tar -czvf web.tar.gz ./* 开启一个http.server服务&#xff0c;将文件下载到本地 python3 -m http.server 放在D盾中检测 基本可以确认木马文件就是这四个 /var/www/html/shell.p…

高效实现聚水潭数据集成MySQL的技术案例

聚水潭奇门数据集成到MySQL的技术案例分享 在现代企业的数据管理中&#xff0c;如何高效、准确地实现不同系统之间的数据对接是一个关键问题。本文将聚焦于一个实际的系统对接集成案例&#xff1a;将聚水潭奇门平台的售后单数据集成到MySQL数据库中&#xff0c;具体方案名称为…

JVM—类的生命周期

目录 类的生命周期 加载阶段 连接阶段 验证阶段 准备阶段 解析阶段 初始化阶段 面试题1 面试题2 类的生命周期 类的生命周期描述了一个类加载、使用、卸载的整个过程&#xff0c;整体可以分为以下五个阶段。 1. 加载 2. 连接&#xff0c;其中又分为验证、准备、解析三…

Python学习的自我理解和想法(21)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第21天&#xff0c;学的内容是文件的操作。开学了&#xff0c;时间不多&#xff0c;写得不多&#xff0c;见谅。 目录 1.文件 (1).参数…

Tcp_Sever(线程池版本的 TCP 服务器)

Tcp_Sever&#xff08;线程池版本的 TCP 服务器&#xff09; 前言1. 功能介绍及展示1.1 服务端连接1.2 客户端连接&#xff08;可多个用户同时在线连接服务端&#xff09;1.3 功能服务1.3.1 defaultService&#xff08;默认服务&#xff09;1.3.2 transform&#xff08;大小写转…

Rust与Javascript的使用对比

一、常量 RustJavascriptletconst 二、变量 RustJavascriptlet mutlet / var 三、常用打印 RustJavascriptprintln!(“换行”);console.log(‘hello’);print!(“不换行”);console.info(‘信息’);-console.error(‘错误’);-console.warn(‘警告’); 四、定义字符串 R…