shareToken优化,支持存储多个shareToken,防止单个浏览器打开多个分享链接,分享失效问题

Raod 2 years ago
parent da3c955c0a
commit 1ad233d7c9

@ -101,15 +101,17 @@ public class TokenFilter implements Filter {
filterChain.doFilter(request, response); filterChain.doFilter(request, response);
return; return;
} }
//获取token
String token = request.getHeader("Authorization");
//针对大屏分享,优先处理 //针对大屏分享,优先处理
String shareToken = request.getHeader("Share-Token"); String shareToken = request.getHeader("Share-Token");
if (StringUtils.isNotBlank(shareToken)) { if (StringUtils.isNotBlank(shareToken) && StringUtils.isBlank(token)) {
//两个接口需要处理 //需要处理
// /reportDashboard/getData // /reportDashboard/getData
// /reportDashboard/{reportCode} // /reportDashboard/{reportCode}
String reportCode = JwtUtil.getReportCode(shareToken); // /reportExcel/preview
if (!uri.endsWith("/getData") && !uri.contains(reportCode)) { List<String> reportCodeList = JwtUtil.getReportCodeList(shareToken);
if (!uri.endsWith("/reportDashboard/getData") && !uri.endsWith("/reportExcel/preview") && reportCodeList.stream().noneMatch(uri::contains)) {
ResponseBean responseBean = ResponseBean.builder().code("50014") ResponseBean responseBean = ResponseBean.builder().code("50014")
.message("分享链接已过期").build(); .message("分享链接已过期").build();
response.getWriter().print(JSONObject.toJSONString(responseBean)); response.getWriter().print(JSONObject.toJSONString(responseBean));
@ -120,8 +122,7 @@ public class TokenFilter implements Filter {
} }
//获取token
String token = request.getHeader("Authorization");
if (StringUtils.isBlank(token)) { if (StringUtils.isBlank(token)) {
error(response); error(response);
return; return;

@ -1,5 +1,6 @@
package com.anjiplus.template.gaea.business.util; package com.anjiplus.template.gaea.business.util;
import com.anji.plus.gaea.constant.GaeaConstant;
import com.anji.plus.gaea.exception.BusinessExceptionBuilder; import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
import com.anjiplus.template.gaea.business.code.ResponseCode; import com.anjiplus.template.gaea.business.code.ResponseCode;
import com.auth0.jwt.JWT; import com.auth0.jwt.JWT;
@ -9,8 +10,11 @@ import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.DecodedJWT;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* Created by raodeming on 2021/8/18. * Created by raodeming on 2021/8/18.
@ -53,6 +57,15 @@ public class JwtUtil {
return claim.asString(); return claim.asString();
} }
/**
* token
* @param tokenList
* @return
*/
public static List<String> getReportCodeList(String tokenList) {
return Arrays.stream(tokenList.split(GaeaConstant.SPLIT)).filter(StringUtils::isNotBlank).map(JwtUtil::getReportCode).distinct().collect(Collectors.toList());
}
public static String getShareCode(String token) { public static String getShareCode(String token) {
Claim claim = getClaim(token).get("shareCode"); Claim claim = getClaim(token).get("shareCode");
if (null == claim) { if (null == claim) {

@ -1,4 +1,5 @@
import request from '@/utils/request' import request from '@/utils/request'
import {getShareToken, getToken} from "@/utils/auth";
// 设计报表 // 设计报表
export function design(data) { export function design(data) {
@ -14,6 +15,7 @@ export function preview(data) {
return request({ return request({
url: 'reportExcel/preview', url: 'reportExcel/preview',
method: 'post', method: 'post',
headers: { 'Share-Token': getShareToken(), 'Authorization': getToken() },
data, data,
}) })
} }

@ -3,7 +3,7 @@ import NProgress from 'nprogress'
import 'nprogress/nprogress.css' import 'nprogress/nprogress.css'
import { getToken, getAccessUser } from "@/utils/auth"; import { getToken, getAccessUser } from "@/utils/auth";
export default router export default router
const whiteList = ['/login', '/aj/**', '/bigscreen/viewer'] const whiteList = ['/login', '/aj/**', '/el/**', '/bigscreen/viewer', '/excelreport/viewer']
// 判断是否需要登录权限 以及是否登录 // 判断是否需要登录权限 以及是否登录
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {

@ -11,9 +11,13 @@ export function getShareToken() {
return getStorageItem(ShareTokenKey) == null ? '' : getStorageItem(ShareTokenKey); return getStorageItem(ShareTokenKey) == null ? '' : getStorageItem(ShareTokenKey);
} }
export function setToken(token) { export function setToken(token) {
return setStorageItem(TokenKey, token) return setStorageItem(TokenKey, token);
} }
export function setShareToken(shareToken) { export function setShareToken(shareToken) {
const originalShareToken = getShareToken();
if ((originalShareToken != null || originalShareToken != '') && originalShareToken.indexOf(shareToken) == -1) {
shareToken = originalShareToken + ',' + shareToken
}
return setStorageItem(ShareTokenKey, shareToken) return setStorageItem(ShareTokenKey, shareToken)
} }
export function delToken() { export function delToken() {

Loading…
Cancel
Save