aliyunOSS分片上传
This commit is contained in:
parent
f970ef326d
commit
9d14174791
@ -2,12 +2,15 @@ package com.qiwenshare.common.upload;
|
|||||||
|
|
||||||
import com.qiwenshare.common.domain.UploadFile;
|
import com.qiwenshare.common.domain.UploadFile;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
|
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.RandomAccessFile;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -69,6 +72,27 @@ public abstract class Uploader {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized boolean checkUploadStatus(UploadFile param, File confFile) throws IOException {
|
||||||
|
//File confFile = new File(savePath, timeStampName + ".conf");
|
||||||
|
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
|
||||||
|
//设置文件长度
|
||||||
|
confAccessFile.setLength(param.getTotalChunks());
|
||||||
|
//设置起始偏移量
|
||||||
|
confAccessFile.seek(param.getChunkNumber() - 1);
|
||||||
|
//将指定的一个字节写入文件中 127,
|
||||||
|
confAccessFile.write(Byte.MAX_VALUE);
|
||||||
|
byte[] completeStatusList = FileUtils.readFileToByteArray(confFile);
|
||||||
|
confAccessFile.close();//不关闭会造成无法占用
|
||||||
|
//创建conf文件文件长度为总分片数,每上传一个分块即向conf文件中写入一个127,那么没上传的位置就是默认的0,已上传的就是127
|
||||||
|
for (int i = 0; i < completeStatusList.length; i++) {
|
||||||
|
if (completeStatusList[i] != Byte.MAX_VALUE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
confFile.delete();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected String getFileName(String fileName){
|
protected String getFileName(String fileName){
|
||||||
return fileName.substring(0, fileName.lastIndexOf("."));
|
return fileName.substring(0, fileName.lastIndexOf("."));
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
|
|||||||
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSS;
|
||||||
import com.aliyun.oss.OSSClientBuilder;
|
import com.aliyun.oss.OSSClientBuilder;
|
||||||
import com.aliyun.oss.model.*;
|
import com.aliyun.oss.model.*;
|
||||||
|
import com.aliyuncs.utils.StringUtils;
|
||||||
import com.qiwenshare.common.domain.AliyunOSS;
|
import com.qiwenshare.common.domain.AliyunOSS;
|
||||||
import com.qiwenshare.common.domain.UploadFile;
|
import com.qiwenshare.common.domain.UploadFile;
|
||||||
import com.qiwenshare.common.upload.Uploader;
|
import com.qiwenshare.common.upload.Uploader;
|
||||||
@ -31,12 +32,19 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUploader.class);
|
private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUploader.class);
|
||||||
|
|
||||||
private UploadFile uploadFile;
|
private UploadFile uploadFile;
|
||||||
public static ExecutorService executorService = Executors.newFixedThreadPool(1);
|
private String endpoint;
|
||||||
|
private String accessKeyId;
|
||||||
|
private String accessKeySecret;
|
||||||
|
private String bucketName;
|
||||||
|
|
||||||
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
|
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
|
||||||
public static Map<String, List<PartETag>> partETagsMap = new HashMap<String, List<PartETag>>();
|
public static Map<String, List<PartETag>> partETagsMap = new HashMap<String, List<PartETag>>();
|
||||||
public static Map<String, UploadFileInfo> uploadPartRequestMap = new HashMap<>();
|
public static Map<String, UploadFileInfo> uploadPartRequestMap = new HashMap<>();
|
||||||
|
|
||||||
|
public static Map<String, OSS> ossMap = new HashMap<>();
|
||||||
|
|
||||||
|
public static Map<String, String> timeStampNameMap = new HashMap<>();
|
||||||
|
|
||||||
public AliyunOSSUploader() {
|
public AliyunOSSUploader() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -49,8 +57,14 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
public List<UploadFile> upload(HttpServletRequest httpServletRequest) {
|
public List<UploadFile> upload(HttpServletRequest httpServletRequest) {
|
||||||
logger.info("开始上传upload");
|
logger.info("开始上传upload");
|
||||||
|
|
||||||
List<UploadFile> saveUploadFileList = new ArrayList<UploadFile>();
|
List<UploadFile> saveUploadFileList = new ArrayList<>();
|
||||||
this.request = (StandardMultipartHttpServletRequest) httpServletRequest;
|
this.request = (StandardMultipartHttpServletRequest) httpServletRequest;
|
||||||
|
AliyunOSS aliyunOSS = (AliyunOSS) request.getAttribute("oss");
|
||||||
|
|
||||||
|
endpoint = aliyunOSS.getEndpoint();
|
||||||
|
accessKeyId = aliyunOSS.getAccessKeyId();
|
||||||
|
accessKeySecret = aliyunOSS.getAccessKeySecret();
|
||||||
|
bucketName = aliyunOSS.getBucketName();
|
||||||
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
|
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
|
||||||
if (!isMultipart) {
|
if (!isMultipart) {
|
||||||
UploadFile uploadFile = new UploadFile();
|
UploadFile uploadFile = new UploadFile();
|
||||||
@ -85,15 +99,9 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<UploadFile> doUpload(String savePath, Iterator<String> iter) throws IOException {
|
private List<UploadFile> doUpload(String savePath, Iterator<String> iter) throws IOException {
|
||||||
AliyunOSS aliyunOSS = (AliyunOSS) request.getAttribute("oss");
|
OSS ossClient = getClient();
|
||||||
|
|
||||||
String endpoint = aliyunOSS.getEndpoint();
|
List<UploadFile> saveUploadFileList = new ArrayList<>();
|
||||||
String accessKeyId = aliyunOSS.getAccessKeyId();
|
|
||||||
String accessKeySecret = aliyunOSS.getAccessKeySecret();
|
|
||||||
String bucketName = aliyunOSS.getBucketName();
|
|
||||||
|
|
||||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
||||||
List<UploadFile> saveUploadFileList = new ArrayList<UploadFile>();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
MultipartFile multipartfile = this.request.getFile(iter.next());
|
MultipartFile multipartfile = this.request.getFile(iter.next());
|
||||||
@ -112,7 +120,6 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
String confFilePath = savePath + FILE_SEPARATOR + uploadFile.getIdentifier() + "." + "conf";
|
String confFilePath = savePath + FILE_SEPARATOR + uploadFile.getIdentifier() + "." + "conf";
|
||||||
File confFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + confFilePath);
|
File confFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + confFilePath);
|
||||||
|
|
||||||
|
|
||||||
synchronized (AliyunOSSUploader.class) {
|
synchronized (AliyunOSSUploader.class) {
|
||||||
if (uploadPartRequestMap.get(uploadFile.getIdentifier()) == null) {
|
if (uploadPartRequestMap.get(uploadFile.getIdentifier()) == null) {
|
||||||
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, ossFilePath.substring(1));
|
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, ossFilePath.substring(1));
|
||||||
@ -146,7 +153,7 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
|
|
||||||
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
|
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
|
||||||
synchronized (AliyunOSSUploader.class) {
|
synchronized (AliyunOSSUploader.class) {
|
||||||
|
logger.info("上传结果:" + JSON.toJSONString(uploadPartResult));
|
||||||
if (partETagsMap.get(uploadFile.getIdentifier()) == null) {
|
if (partETagsMap.get(uploadFile.getIdentifier()) == null) {
|
||||||
List<PartETag> partETags = new ArrayList<PartETag>();
|
List<PartETag> partETags = new ArrayList<PartETag>();
|
||||||
partETags.add(uploadPartResult.getPartETag());
|
partETags.add(uploadPartResult.getPartETag());
|
||||||
@ -159,25 +166,8 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
boolean isComplete = checkUploadStatus(uploadFile, confFile);
|
boolean isComplete = checkUploadStatus(uploadFile, confFile);
|
||||||
if (isComplete) {
|
if (isComplete) {
|
||||||
logger.info("分片上传完成");
|
logger.info("分片上传完成");
|
||||||
List<PartETag> partETags = partETagsMap.get(uploadFile.getIdentifier());
|
completeMultipartUpload();
|
||||||
List<PartETag> partETagsSort = new ArrayList<>();
|
|
||||||
for (int i = 0; i < partETags.size(); i++) {
|
|
||||||
for (int index = 1; index <= partETags.size(); index++) {
|
|
||||||
if (i + 1 == partETags.get(index - 1).getPartNumber()) {
|
|
||||||
partETagsSort.add(partETags.get(index - 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
CompleteMultipartUploadRequest completeMultipartUploadRequest =
|
|
||||||
new CompleteMultipartUploadRequest(bucketName,
|
|
||||||
ossFilePath.substring(1),
|
|
||||||
uploadFileInfo.getUploadId(),
|
|
||||||
partETagsSort);
|
|
||||||
logger.info("----:" + JSON.toJSONString(partETagsSort));
|
|
||||||
// 完成上传。
|
|
||||||
CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
|
|
||||||
logger.info("----:" + JSON.toJSONString(completeMultipartUploadRequest));
|
|
||||||
uploadFile.setUrl(ossFilePath);
|
uploadFile.setUrl(ossFilePath);
|
||||||
uploadFile.setSuccess(1);
|
uploadFile.setSuccess(1);
|
||||||
uploadFile.setMessage("上传成功");
|
uploadFile.setMessage("上传成功");
|
||||||
@ -188,34 +178,6 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("上传出错:" + e);
|
logger.error("上传出错:" + e);
|
||||||
// 列举已上传的分片,其中uploadId来自于InitiateMultipartUpload返回的结果。
|
|
||||||
ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
|
|
||||||
// 设置uploadId。
|
|
||||||
//listPartsRequest.setUploadId(uploadId);
|
|
||||||
// 设置分页时每一页中分片数量为100个。默认列举1000个分片。
|
|
||||||
listPartsRequest.setMaxParts(100);
|
|
||||||
// 指定List的起始位置。只有分片号大于此参数值的分片会被列举。
|
|
||||||
// listPartsRequest.setPartNumberMarker(1);
|
|
||||||
PartListing partListing = ossClient.listParts(listPartsRequest);
|
|
||||||
|
|
||||||
for (PartSummary part : partListing.getParts()) {
|
|
||||||
logger.info("分片号:"+part.getPartNumber() + ", 分片数据大小: "+
|
|
||||||
part.getSize() + ",分片的ETag:"+part.getETag()
|
|
||||||
+ ", 分片最后修改时间:"+ part.getLastModified());
|
|
||||||
// 获取分片号。
|
|
||||||
part.getPartNumber();
|
|
||||||
// 获取分片数据大小。
|
|
||||||
part.getSize();
|
|
||||||
// 获取分片的ETag。
|
|
||||||
part.getETag();
|
|
||||||
// 获取分片的最后修改时间。
|
|
||||||
part.getLastModified();
|
|
||||||
}
|
|
||||||
AbortMultipartUploadRequest abortMultipartUploadRequest =
|
|
||||||
new AbortMultipartUploadRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
|
|
||||||
ossClient.abortMultipartUpload(abortMultipartUploadRequest);
|
|
||||||
} finally {
|
|
||||||
ossClient.shutdown();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadFile.setIsOSS(1);
|
uploadFile.setIsOSS(1);
|
||||||
@ -225,25 +187,87 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
return saveUploadFileList;
|
return saveUploadFileList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean checkUploadStatus(UploadFile param, File confFile) throws IOException {
|
/**
|
||||||
//File confFile = new File(savePath, timeStampName + ".conf");
|
* 将文件分块进行升序排序并执行文件上传。
|
||||||
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
|
*/
|
||||||
//设置文件长度
|
protected void completeMultipartUpload() {
|
||||||
confAccessFile.setLength(param.getTotalChunks());
|
|
||||||
//设置起始偏移量
|
List<PartETag> partETags = partETagsMap.get(uploadFile.getIdentifier());
|
||||||
confAccessFile.seek(param.getChunkNumber() - 1);
|
Collections.sort(partETags, Comparator.comparingInt(PartETag::getPartNumber));
|
||||||
//将指定的一个字节写入文件中 127,
|
UploadFileInfo uploadFileInfo = uploadPartRequestMap.get(uploadFile.getIdentifier());
|
||||||
confAccessFile.write(Byte.MAX_VALUE);
|
CompleteMultipartUploadRequest completeMultipartUploadRequest =
|
||||||
byte[] completeStatusList = FileUtils.readFileToByteArray(confFile);
|
new CompleteMultipartUploadRequest(bucketName,
|
||||||
confAccessFile.close();//不关闭会造成无法占用
|
uploadFileInfo.getKey(),
|
||||||
//创建conf文件文件长度为总分片数,每上传一个分块即向conf文件中写入一个127,那么没上传的位置就是默认的0,已上传的就是127
|
uploadFileInfo.getUploadId(),
|
||||||
for (int i = 0; i < completeStatusList.length; i++) {
|
partETags);
|
||||||
if (completeStatusList[i] != Byte.MAX_VALUE) {
|
logger.info("----:" + JSON.toJSONString(partETags));
|
||||||
return false;
|
// 完成上传。
|
||||||
}
|
CompleteMultipartUploadResult completeMultipartUploadResult = getClient().completeMultipartUpload(completeMultipartUploadRequest);
|
||||||
|
logger.info("----:" + JSON.toJSONString(completeMultipartUploadRequest));
|
||||||
|
getClient().shutdown();
|
||||||
|
partETagsMap.remove(uploadFile.getIdentifier());
|
||||||
|
uploadPartRequestMap.remove(uploadFile.getIdentifier());
|
||||||
|
ossMap.remove(uploadFile.getIdentifier());
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
private void listFile() {
|
||||||
|
// 列举已上传的分片,其中uploadId来自于InitiateMultipartUpload返回的结果。
|
||||||
|
ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
|
||||||
|
// 设置uploadId。
|
||||||
|
//listPartsRequest.setUploadId(uploadId);
|
||||||
|
// 设置分页时每一页中分片数量为100个。默认列举1000个分片。
|
||||||
|
listPartsRequest.setMaxParts(100);
|
||||||
|
// 指定List的起始位置。只有分片号大于此参数值的分片会被列举。
|
||||||
|
// listPartsRequest.setPartNumberMarker(1);
|
||||||
|
PartListing partListing = getClient().listParts(listPartsRequest);
|
||||||
|
|
||||||
|
for (PartSummary part : partListing.getParts()) {
|
||||||
|
logger.info("分片号:"+part.getPartNumber() + ", 分片数据大小: "+
|
||||||
|
part.getSize() + ",分片的ETag:"+part.getETag()
|
||||||
|
+ ", 分片最后修改时间:"+ part.getLastModified());
|
||||||
|
// 获取分片号。
|
||||||
|
part.getPartNumber();
|
||||||
|
// 获取分片数据大小。
|
||||||
|
part.getSize();
|
||||||
|
// 获取分片的ETag。
|
||||||
|
part.getETag();
|
||||||
|
// 获取分片的最后修改时间。
|
||||||
|
part.getLastModified();
|
||||||
}
|
}
|
||||||
confFile.delete();
|
|
||||||
return true;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消上传
|
||||||
|
*/
|
||||||
|
private void cancelUpload() {
|
||||||
|
AbortMultipartUploadRequest abortMultipartUploadRequest =
|
||||||
|
new AbortMultipartUploadRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
|
||||||
|
getClient().abortMultipartUpload(abortMultipartUploadRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected synchronized String getTimeStampName(){
|
||||||
|
String timeStampName;
|
||||||
|
|
||||||
|
if (StringUtils.isEmpty(timeStampNameMap.get(uploadFile.getIdentifier()))) {
|
||||||
|
timeStampName = super.getTimeStampName();
|
||||||
|
timeStampNameMap.put(uploadFile.getIdentifier(), timeStampName);
|
||||||
|
} else {
|
||||||
|
timeStampName = timeStampNameMap.get(uploadFile.getIdentifier());
|
||||||
|
}
|
||||||
|
return timeStampName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized OSS getClient() {
|
||||||
|
OSS ossClient = null;
|
||||||
|
if (ossMap.get(uploadFile.getIdentifier()) == null) {
|
||||||
|
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||||
|
ossMap.put(uploadFile.getIdentifier(), ossClient);
|
||||||
|
} else {
|
||||||
|
ossClient = ossMap.get(uploadFile.getIdentifier());
|
||||||
|
}
|
||||||
|
return ossClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -77,27 +77,6 @@ public class ChunkUploader extends Uploader {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkUploadStatus(UploadFile param, File confFile) throws IOException {
|
|
||||||
//File confFile = new File(savePath, timeStampName + ".conf");
|
|
||||||
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
|
|
||||||
//设置文件长度
|
|
||||||
confAccessFile.setLength(param.getTotalChunks());
|
|
||||||
//设置起始偏移量
|
|
||||||
confAccessFile.seek(param.getChunkNumber() - 1);
|
|
||||||
//将指定的一个字节写入文件中 127,
|
|
||||||
confAccessFile.write(Byte.MAX_VALUE);
|
|
||||||
byte[] completeStatusList = FileUtils.readFileToByteArray(confFile);
|
|
||||||
confAccessFile.close();//不关闭会造成无法占用
|
|
||||||
//创建conf文件文件长度为总分片数,每上传一个分块即向conf文件中写入一个127,那么没上传的位置就是默认的0,已上传的就是127
|
|
||||||
for (int i = 0; i < completeStatusList.length; i++) {
|
|
||||||
if (completeStatusList[i] != Byte.MAX_VALUE) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
confFile.delete();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<UploadFile> doUpload(String savePath, Iterator<String> iter) throws IOException, NotSameFileExpection {
|
private List<UploadFile> doUpload(String savePath, Iterator<String> iter) throws IOException, NotSameFileExpection {
|
||||||
List<UploadFile> saveUploadFileList = new ArrayList<UploadFile>();
|
List<UploadFile> saveUploadFileList = new ArrayList<UploadFile>();
|
||||||
//UploadFile uploadFile = new UploadFile();
|
//UploadFile uploadFile = new UploadFile();
|
||||||
@ -168,7 +147,7 @@ public class ChunkUploader extends Uploader {
|
|||||||
uploadFile.setSuccess(0);
|
uploadFile.setSuccess(0);
|
||||||
uploadFile.setMessage("未完成");
|
uploadFile.setMessage("未完成");
|
||||||
}
|
}
|
||||||
uploadFile.setFileSize(uploadFile.getCurrentChunkSize());
|
uploadFile.setFileSize(uploadFile.getTotalSize());
|
||||||
saveUploadFileList.add(uploadFile);
|
saveUploadFileList.add(uploadFile);
|
||||||
|
|
||||||
return saveUploadFileList;
|
return saveUploadFileList;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.qiwenshare.common.util;
|
package com.qiwenshare.common.util;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import io.jsonwebtoken.Claims;
|
import io.jsonwebtoken.Claims;
|
||||||
import io.jsonwebtoken.JwtBuilder;
|
import io.jsonwebtoken.JwtBuilder;
|
||||||
import io.jsonwebtoken.Jwts;
|
import io.jsonwebtoken.Jwts;
|
||||||
@ -9,7 +8,6 @@ import org.apache.commons.net.util.Base64;
|
|||||||
|
|
||||||
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKey;
|
||||||
import javax.crypto.spec.SecretKeySpec;
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -24,7 +22,7 @@ public class JjwtUtil {
|
|||||||
public static final String JWT_SECRET = "jiamimiwen";
|
public static final String JWT_SECRET = "jiamimiwen";
|
||||||
|
|
||||||
// 过期时间,单位毫秒
|
// 过期时间,单位毫秒
|
||||||
public static final int EXPIRE_TIME = 60 * 60 * 1000; // 一个小时
|
public static final int EXPIRE_TIME = 60 * 60 * 1000 * 24 * 7; // 一个星期
|
||||||
// public static final long EXPIRE_TIME = 7 * 24 * 3600 * 1000; // 一个星期
|
// public static final long EXPIRE_TIME = 7 * 24 * 3600 * 1000; // 一个星期
|
||||||
|
|
||||||
// 由字符串生成加密key
|
// 由字符串生成加密key
|
||||||
@ -89,18 +87,6 @@ public class JjwtUtil {
|
|||||||
.parseClaimsJws(jwt).getBody(); // 设置需要解析的jwt
|
.parseClaimsJws(jwt).getBody(); // 设置需要解析的jwt
|
||||||
return claims;
|
return claims;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
Claims claims = null;
|
|
||||||
try {
|
|
||||||
claims = parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJhZGRyQXJlYVwiOlwi6ZuB5aGU5Yy6XCIsXCJhZGRyQ2l0eVwiOlwi6KW_5a6J5biCXCIsXCJhZGRyUHJvdmluY2VcIjpcIumZleilv-ecgVwiLFwiYmVnaW5Db3VudFwiOjAsXCJiaXJ0aGRheVwiOlwiMTk5NC0wNS0wNlwiLFwiY3VycmVudFBhZ2VcIjowLFwiZWRpdG9yVHlwZVwiOjAsXCJlbWFpbFwiOlwiMTE2MjcxNDQ4M0BxcS5jb21cIixcImVzc2F5Q291bnRcIjowLFwiaW1hZ2VVcmxcIjpcIi91cGxvYWQvMjAyMDA3MTUvODA5NjE1OTQ4MjEzODkwNTkuanBnXCIsXCJpbmR1c3RyeVwiOlwi6K6h566X5py66KGM5LiaXCIsXCJpbnRyb1wiOlwi6ZSZ5oqK6ZmI6YaL5b2T5oiQ5aKo77yM5YaZ5bC95Y2K55Sf6YO95piv6YW444CCXCIsXCJsYXN0TG9naW5UaW1lXCI6XCIyMDIwLTEwLTI3IDE5OjAxOjU0XCIsXCJub3RSZWFkQ291bnRcIjowLFwicGFnZUNvdW50XCI6MCxcInBhc3N3b3JkXCI6XCI3NjcyYmE0NDc4OTY5NTlmNmU1NDQ1NTcxOGY2ZWU2ZlwiLFwic2FsdFwiOlwiMzY5MjQ1NzgxMDIyMDg3NlwiLFwic2V4XCI6XCLnlLdcIixcInRlbGVwaG9uZVwiOlwiMTg4MjkyOTE4MTdcIixcInVzZXJJZFwiOjIsXCJ1c2VybmFtZVwiOlwiTUFDXCJ9IiwiYXVkIjoicWl3ZW4iLCJwYXNzd29yZCI6IjAxMDIwMyIsImlzcyI6InFpd2Vuc2hhcmUiLCJleHAiOjE2MDM4MDA0MDcsImlhdCI6MTYwMzc5NjgwNywianRpIjoiNzYzZTE0NDMtYmZjYS00MDkzLTg3NGYtMzlmMzQ1ODRiZDkyIiwidXNlcm5hbWUiOiJhZG1pbiJ9.Gv_QlXZEiT_-mbI2Iz6oa2SqgBXwVzsS_xK8RhvF7oY");
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
String subject = claims.getSubject();
|
|
||||||
System.out.println(subject);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user