From c3c8dcd217e912f7fc831728a1fd72afde62e427 Mon Sep 17 00:00:00 2001
From: JEECG <445654970@qq.com>
Date: Mon, 7 Jul 2025 10:27:39 +0800
Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20=E9=9D=A9=E5=91=BD=E6=80=A7?=
=?UTF-8?q?=E5=8D=87=E7=BA=A7=EF=BC=81JimuReport=20=E7=A7=AF=E6=9C=A8?=
=?UTF-8?q?=E6=8A=A5=E8=A1=A8=20v2.1.0=20=E7=89=88=E6=9C=AC=E9=9C=87?=
=?UTF-8?q?=E6=92=BC=E5=8F=91=E5=B8=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
jimureport-example/Dockerfile | 4 +-
jimureport-example/pom.xml | 2 +-
.../jeecg/modules/JimuReportApplication.java | 9 +++-
.../config/ApiSecurityConfigFilter.java | 4 +-
.../config/CustomLoginSuccessHandler.java | 28 +++++++++-
.../jmreport/config/SpringSecurityConfig.java | 1 +
.../jmreport/config/ViewPageCustomAccess.java | 5 +-
.../extend/JimuReportTokenServiceImpl.java | 52 +++++++++++--------
8 files changed, 72 insertions(+), 33 deletions(-)
diff --git a/jimureport-example/Dockerfile b/jimureport-example/Dockerfile
index 2dc339e..3d4fbdc 100644
--- a/jimureport-example/Dockerfile
+++ b/jimureport-example/Dockerfile
@@ -10,6 +10,6 @@ WORKDIR /jimureport
EXPOSE 8085
-ADD ./target/jimureport-example-2.0.jar ./
+ADD ./target/jimureport-example-2.1.jar ./
-CMD java -DMYSQL-HOST=jimureport-mysql -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jimureport-example-2.0.jar
\ No newline at end of file
+CMD java -DMYSQL-HOST=jimureport-mysql -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jimureport-example-2.1.jar
\ No newline at end of file
diff --git a/jimureport-example/pom.xml b/jimureport-example/pom.xml
index 34711e3..d664803 100644
--- a/jimureport-example/pom.xml
+++ b/jimureport-example/pom.xml
@@ -12,7 +12,7 @@
jimureport-example
org.jeecg
jimureport-example
- 2.0
+ 2.1
http://www.jimureport.com
积木报表集成示例
diff --git a/jimureport-example/src/main/java/com/jeecg/modules/JimuReportApplication.java b/jimureport-example/src/main/java/com/jeecg/modules/JimuReportApplication.java
index cfc40d6..4c5dd44 100644
--- a/jimureport-example/src/main/java/com/jeecg/modules/JimuReportApplication.java
+++ b/jimureport-example/src/main/java/com/jeecg/modules/JimuReportApplication.java
@@ -11,14 +11,19 @@ import org.springframework.core.env.Environment;
* 积木报表独立服务启动类
*/
@SpringBootApplication(scanBasePackages = {"org.jeecg", "com.jeecg"})
-@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class})
+@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})
public class JimuReportApplication {
public static void main(String[] args) {
ConfigurableApplicationContext application = SpringApplication.run(JimuReportApplication.class, args);
Environment env = application.getEnvironment();
String port = env.getProperty("server.port");
- String path = env.containsProperty("server.servlet.context-path") ? env.getProperty("server.servlet.context-path") : "";
+ String path = env.containsProperty("server.servlet.context-path")?env.getProperty("server.servlet.context-path"):"";
+ String currentEncoding = System.getProperty("file.encoding", "UTF-8");
+ if(!currentEncoding.equalsIgnoreCase("UTF-8")){
+ // 默认编码不是UTF-8设置为UTF-8
+ System.setProperty("file.encoding", "UTF-8");
+ }
System.out.println("\n----------------------------------------------------------\n\t" +
"JimuReport 积木报表平台 is running! Access URL:\n\t" +
"报表工作台: \t\thttp://localhost:" + port + path + "/jmreport/list\n\t" +
diff --git a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ApiSecurityConfigFilter.java b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ApiSecurityConfigFilter.java
index b80467b..e0351de 100644
--- a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ApiSecurityConfigFilter.java
+++ b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ApiSecurityConfigFilter.java
@@ -21,9 +21,9 @@ public class ApiSecurityConfigFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String loginFrom = req.getHeader("jm_login_from");
- if(OkConvertUtils.isNotEmpty(loginFrom)){
+ if(null != loginFrom && !loginFrom.isEmpty()){
String springSecurityContext = req.getHeader("jm_spring_security_context");
- if(OkConvertUtils.isNotEmpty(springSecurityContext)){
+ if(null != springSecurityContext && !springSecurityContext.isEmpty()){
SecurityContextImpl securityContext = JSONObject.parseObject(springSecurityContext, SecurityContextImpl.class);
HttpSession session = req.getSession();
session.setAttribute("loginFrom", loginFrom);
diff --git a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/CustomLoginSuccessHandler.java b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/CustomLoginSuccessHandler.java
index fd19a33..47c1092 100644
--- a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/CustomLoginSuccessHandler.java
+++ b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/CustomLoginSuccessHandler.java
@@ -1,13 +1,17 @@
package com.jeecg.modules.jmreport.config;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
+import org.springframework.security.web.savedrequest.SavedRequest;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
/**
* 自定义springsecurity登录成功处理
@@ -15,6 +19,7 @@ import java.io.IOException;
* @author chenrui
* @date 2024/8/2 16:26
*/
+@Slf4j
public class CustomLoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
@Override
@@ -22,6 +27,27 @@ public class CustomLoginSuccessHandler extends SavedRequestAwareAuthenticationSu
Authentication authentication) throws IOException, ServletException {
HttpSession session = request.getSession();
session.setAttribute("loginFrom", "jimu_example");
- super.onAuthenticationSuccess(request, response, authentication);
+
+ SavedRequest savedRequest = (SavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST");
+ String redirectUrl = savedRequest != null ? savedRequest.getRedirectUrl() : null;
+
+ if (redirectUrl != null) {
+ try {
+ URI uri = new URI(redirectUrl);
+ String path = uri.getPath(); // 提取路径部分
+
+ if (path != null && path.startsWith("/jmreport")) {
+ // 路径符合要求,执行默认跳转
+ super.onAuthenticationSuccess(request, response, authentication);
+ return;
+ }
+ } catch (URISyntaxException e) {
+ // URL解析失败,打印日志后继续执行默认跳转
+ log.error(e.getMessage(), e);
+ }
+ }
+
+ // 不符合 /jmreport 开头,或 redirectUrl 为 null 或异常
+ response.sendRedirect("/");
}
}
\ No newline at end of file
diff --git a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/SpringSecurityConfig.java b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/SpringSecurityConfig.java
index 0540fc9..51a66e8 100644
--- a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/SpringSecurityConfig.java
+++ b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/SpringSecurityConfig.java
@@ -60,6 +60,7 @@ public class SpringSecurityConfig {
"/jmreport/show",
"/jmreport/form/submit",
"/jmreport/form/repeat/check/**",
+ "/jmreport/exportReport",
"/jmreport/addViewCount/**").permitAll()
// 仪表盘分享页面
.antMatchers("/jimubi/share/view/**",
diff --git a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ViewPageCustomAccess.java b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ViewPageCustomAccess.java
index 48f509d..3ef7ac8 100644
--- a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ViewPageCustomAccess.java
+++ b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/config/ViewPageCustomAccess.java
@@ -21,7 +21,7 @@ public class ViewPageCustomAccess {
public boolean check(HttpServletRequest request, Authentication authentication) {
Object principal = authentication.getPrincipal();
- if (OkConvertUtils.isEmpty(principal) || "anonymousUser".equalsIgnoreCase(principal.toString())) {
+ if (null == principal || principal.toString().isEmpty() || "anonymousUser".equalsIgnoreCase(principal.toString())) {
// 未登录
if (openViewPage) {
// 配置文件设置了开放view页面
@@ -30,7 +30,8 @@ public class ViewPageCustomAccess {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String previousPage = httpRequest.getParameter("previousPage");
String jmLink = httpRequest.getParameter("jmLink");
- if (OkConvertUtils.isNotEmpty(previousPage) && OkConvertUtils.isNotEmpty(jmLink) ) {
+ if (null != previousPage && !previousPage.isEmpty()
+ && null != jmLink && !jmLink.isEmpty()) {
// 参数中有previousPage和jmLink
return true;
}
diff --git a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/extend/JimuReportTokenServiceImpl.java b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/extend/JimuReportTokenServiceImpl.java
index 19d875d..72822fb 100644
--- a/jimureport-example/src/main/java/com/jeecg/modules/jmreport/extend/JimuReportTokenServiceImpl.java
+++ b/jimureport-example/src/main/java/com/jeecg/modules/jmreport/extend/JimuReportTokenServiceImpl.java
@@ -1,8 +1,12 @@
package com.jeecg.modules.jmreport.extend;
import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
+import org.jeecg.modules.jmreport.common.constant.JmConst;
+import org.jeecg.modules.jmreport.common.util.JimuSpringContextUtils;
+import org.jeecg.modules.jmreport.common.util.OkConvertUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
+
import javax.servlet.http.HttpServletRequest;
/**
@@ -20,31 +24,11 @@ public class JimuReportTokenServiceImpl implements JmReportTokenServiceI {
*/
@Override
public String getToken(HttpServletRequest request) {
- //System.out.println("---------call---------getToken-----------------------");
+ //System.out.println("---------call---------getToken-----------------------");
//return TokenUtils.getTokenByRequest(request);
return "123456";
}
- /**
- * 自定义获取租户
- *
- * @return
- */
- @Override
- public String getTenantId() {
-// String headerTenantId = null;
-// HttpServletRequest request = JimuSpringContextUtils.getHttpServletRequest();
-// if (request != null) {
-// headerTenantId = request.getHeader(JmConst.HEADER_TENANT_ID);
-// if(OkConvertUtils.isEmpty(headerTenantId)){
-// headerTenantId = request.getParameter(JmConst.TENANT_ID);
-// }
-// }
-// return headerTenantId;
- return "1";
- }
-
-
/**
* 通过Token获取登录人用户名
* @param token
@@ -58,7 +42,7 @@ public class JimuReportTokenServiceImpl implements JmReportTokenServiceI {
/**
* 自定义用户拥有的角色
- *
+ *
* @param token
* @return
*/
@@ -83,7 +67,7 @@ public class JimuReportTokenServiceImpl implements JmReportTokenServiceI {
//drag:design:getTotalData 仪表盘对Online表单展示数据
return new String[]{"drag:datasource:testConnection","onl:drag:clear:recovery","drag:analysis:sql","drag:design:getTotalData"};
}
-
+
/**
* Token校验
* @param token
@@ -107,4 +91,26 @@ public class JimuReportTokenServiceImpl implements JmReportTokenServiceI {
header.add("token", "token value 2");
return header;
}
+
+ /**
+ * 自定义获取租户
+ *
+ * @return
+ */
+ @Override
+ public String getTenantId() {
+ String headerTenantId = null;
+ HttpServletRequest request = JimuSpringContextUtils.getHttpServletRequest();
+ if (request != null) {
+ headerTenantId = request.getHeader(JmConst.HEADER_TENANT_KEY);
+ if(OkConvertUtils.isEmpty(headerTenantId)){
+ headerTenantId = request.getHeader(JmConst.HEADER_TENANT_ID);
+ }
+ if(OkConvertUtils.isEmpty(headerTenantId)){
+ headerTenantId = request.getParameter(JmConst.TENANT_ID);
+ }
+ }
+ //return headerTenantId;
+ return null;
+ }
}
\ No newline at end of file