Closed NapChen closed 1 year ago
你设置的对吗,截图看完整的配置
jeecg:
# local|minio|alioss
uploadType: local
# local
path:
#文件路径
upload: /Users/napchen/Documents/dev/hzgc/zqz/zqz-server/file/report/
jmreport:
#多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增)
saasMode: tenant
# 平台上线安全配置(v1.6.2+ 新增)
firewall:
# 数据源安全 (开启后,不允许使用平台数据源、SQL解析加签并不允许查询数据库)
dataSourceSafe: false
# 低代码开发模式(dev:开发模式,prod:发布模式—关闭在线报表设计功能,分配角色admin、lowdeveloper可放开限制)
lowCodeMode: dev
账号使用的是admin,debug已经确认JmReportTokenServiceI.getRoles
返回的是["admin"]
这个是false不会必选数据源
不会必选数据源
是什么意思?设置成true更不行了,目前我配置成false其他接口正常,只有这一个报表设计界面左上角的预览不行,总是会弹出”安全模式下...“的提示。
以下是积木报表的配置,token解析都正常。
package com.jc.config;
import com.jc.utils.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* Created by napchen
*
* @author napchen
* @description 为报表路径增加自定义token
* @since 2022-12-09
*/
@Component
@RequiredArgsConstructor
public class JimuReportConfig implements JmReportTokenServiceI {
@Override
public String getToken(HttpServletRequest request) {
return request.getHeader("token");
}
@Override
public String getToken() {
return JmReportTokenServiceI.super.getToken();
}
@Override
public String getUsername(String key) {
return SecurityUtils.getCurrentUsername();
}
/**
* 返回角色列表
*
* @param s no use
* @return 返回当前用户的角色列表,以控制报表的部分接口能否访问
*/
@Override
public String[] getRoles(String s) {
return SecurityUtils.getCurrentUserRolesCode();
}
@Override
public Boolean verifyToken(String s) {
return true;
}
/**
* 返回租户信息
*
* @return 租户信息
*/
@Override
public String getTenantId() {
return SecurityUtils.getCurrentUserAccountBookCode();
}
@Override
public HttpHeaders customApiHeader() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("token", getToken());
httpHeaders.add("Authorization", "Bearer " + getToken());
return httpHeaders;
}
}
测试不存在你说的问题,你可以升级到1.6.4最新版看看
请使用以下最下环境可以稳定复现 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<!-- jdk版本号-->
<java.version>1.8</java.version>
<!-- DB驱动 -->
<postgresql.version>42.2.6</postgresql.version>
<ojdbc6.version>11.2.0.3</ojdbc6.version>
<sqljdbc4.version>4.0</sqljdbc4.version>
<mysql-connector-java.version>5.1.14</mysql-connector-java.version>
<minio.version>8.0.3</minio.version>
</properties>
<!-- 配置远程仓库-->
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>jeecg</id>
<name>jeecg Repository</name>
<url>https://maven.jeecg.org/nexus/content/repositories/jeecg</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- minio oss-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
<optional>true</optional>
</dependency>
<!-- JimuReport -->
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimureport-spring-boot-starter</artifactId>
<version>1.6.4</version>
</dependency>
<!-- 数据库驱动 -->
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>activiti-repos</id>
<name>Activiti Repository</name>
<url>https://maven.alfresco.com/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</project>
JmReportTokenServiceI
package com.example.demo;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* Created by napchen
*
* @author napchen
* @description 为报表路径增加自定义token
* @since 2022-12-09
*/
@Component
public class JimuReportConfig implements JmReportTokenServiceI {
@Override
public String getToken(HttpServletRequest request) {
return request.getHeader("token");
}
@Override
public String getToken() {
return JmReportTokenServiceI.super.getToken();
}
@Override
public String getUsername(String key) {
return "admin";
}
/**
* 返回角色列表
*
* @param s no use
* @return 返回当前用户的角色列表,以控制报表的部分接口能否访问
*/
@Override
public String[] getRoles(String s) {
return new String[]{"admin"};
}
@Override
public Boolean verifyToken(String s) {
return true;
}
/**
* 返回租户信息
*
* @return 租户信息
*/
@Override
public String getTenantId() {
return "zqz";
}
@Override
public HttpHeaders customApiHeader() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("token", getToken());
httpHeaders.add("Authorization", "Bearer " + getToken());
return httpHeaders;
}
}
application.yml
server:
port: 9000
spring:
#配置静态资源
mvc:
static-path-pattern: /**
resource:
static-locations: classpath:/static/
#配置数据库
datasource:
url: jdbc:mysql://127.0.0.1:3306/zqz?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: Chen1464792252
driver-class-name: com.mysql.cj.jdbc.Driver
#JimuReport[minidao配置]
minidao :
base-package: org.jeecg.modules.jmreport.desreport.dao*
db-type: mysql
#JimuReport[上传配置]
jeecg :
jmreport:
#多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增)
saasMode: tenant
# 自动保存
autoSave: true
# 单位毫秒 默认5*60*1000
interval: 10000
# 平台上线安全配置(v1.6.2+ 新增)
firewall:
# 数据源安全 (开启后,不允许使用平台数据源、SQL解析加签并不允许查询数据库)
dataSourceSafe: false
# 低代码开发模式(dev:开发模式,prod:发布模式—关闭在线报表设计功能,分配角色admin、lowdeveloper可放开限制)
lowCodeMode: dev
# local|minio|alioss
uploadType: local
# local
path :
#文件路径
upload: D:\images
#输出sql日志
logging:
level:
org.jeecg.modules.jmreport : debug
需要配置租户为tenant,预览数据接口会报安全模式下,不允许使用平台数据源
,关闭租户则不会有此问题,目前1.6.4依然存在此问题
如果你开启了saass模式,那必须选择数据源,目前规则就是这样的
如果你开启了saass模式,那必须选择数据源,目前规则就是这样的
请问下如何选择数据源?
新建数据源
已解决,在数据集编写界面新建与系统平台相同的数据源即可进行预览,感谢!
版本号:
1.6.3
问题描述:
报表设计阶段的预览功能被彻底禁用了吗? 我设置了配置
dataSourceSafe: false
,依然不能使用设计页面的预览功能。 感觉如果是为了安全问题,可以通过自定义的filter来进行权限校验,没有必要一刀砍死了呀?错误日志&截图:
重现步骤:
友情提示(为了提高issue处理效率):