基础工具类更新
This commit is contained in:
parent
0d3820e8c9
commit
b618aac0d2
|
|
@ -0,0 +1,133 @@
|
||||||
|
package com.ruoyi.common.utils.checkImgPath;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.imageio.stream.ImageInputStream;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author solo
|
||||||
|
* @date 2019/09/05
|
||||||
|
*/
|
||||||
|
public class CheckImgPath {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String imgPath="/public/image/111.PNG1";
|
||||||
|
String format="/public/image";
|
||||||
|
System.out.println("结果:"+checkImgPath(imgPath,format));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param imgPath 上传图片路径
|
||||||
|
* @param format 格式
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean checkImgPath(String imgPath,String format){
|
||||||
|
int length = format.length();
|
||||||
|
String checkImg = imgPath.substring(0,length);
|
||||||
|
//验证开头
|
||||||
|
if (!format.equals(checkImg)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//验证后缀
|
||||||
|
if(
|
||||||
|
!(imgPath.endsWith(".jpg") ||
|
||||||
|
imgPath.endsWith(".JPG") ||
|
||||||
|
imgPath.endsWith(".png") ||
|
||||||
|
imgPath.endsWith(".PNG") ||
|
||||||
|
imgPath.endsWith(".gif") ||
|
||||||
|
imgPath.endsWith(".GIF"))
|
||||||
|
){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断是否是真图片
|
||||||
|
* @param file
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isImageFile(File file) {
|
||||||
|
ImageInputStream iis = null;
|
||||||
|
try {
|
||||||
|
iis = ImageIO.createImageInputStream(file); // resFile为需被
|
||||||
|
Iterator iter = ImageIO.getImageReaders(iis);
|
||||||
|
if (!iter.hasNext()) {// 文件不是图片
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
BufferedImage bi = ImageIO.read(file);
|
||||||
|
if(bi == null){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} catch (IOException e) {
|
||||||
|
return false;
|
||||||
|
}finally {
|
||||||
|
try {
|
||||||
|
if (iis!=null){
|
||||||
|
iis.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isICON(File file) {
|
||||||
|
FileInputStream iis = null;
|
||||||
|
try {
|
||||||
|
iis = new FileInputStream(file);
|
||||||
|
byte[] bufHeaders = readInputStreamAt(iis,0,8);
|
||||||
|
byte[] markBuf = {0, 0, 1, 0, 1, 0, 32, 32};
|
||||||
|
return compare(bufHeaders, markBuf);
|
||||||
|
} catch (IOException e) {
|
||||||
|
return false;
|
||||||
|
}finally {
|
||||||
|
try {
|
||||||
|
if (iis!=null){
|
||||||
|
iis.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标示一致性比较
|
||||||
|
* @param buf 待检测标示
|
||||||
|
* @param markBuf 标识符字节数组
|
||||||
|
* @return 返回false标示标示不匹配
|
||||||
|
*/
|
||||||
|
private static boolean compare(byte[] buf, byte[] markBuf) {
|
||||||
|
for (int i = 0; i < markBuf.length; i++) {
|
||||||
|
byte b = markBuf[i];
|
||||||
|
byte a = buf[i];
|
||||||
|
|
||||||
|
if(a!=b){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param fis 输入流对象
|
||||||
|
* @param skiplength 跳过位置长度
|
||||||
|
* @param length 要读取的长度
|
||||||
|
* @return 字节数组
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private static byte[] readInputStreamAt(FileInputStream fis, long skiplength, int length) throws IOException
|
||||||
|
{
|
||||||
|
byte[] buf = new byte[length];
|
||||||
|
fis.skip(skiplength); //
|
||||||
|
int read = fis.read(buf,0,length);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package com.ruoyi.common.utils.file;
|
package com.ruoyi.common.utils.file;
|
||||||
|
|
||||||
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.DateUtils;
|
||||||
|
import com.ruoyi.common.utils.checkImgPath.CheckImgPath;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedOutputStream;
|
||||||
|
|
@ -103,14 +105,27 @@ public class UploadFileUtil {
|
||||||
String relativePath = getRelativePath(rootPath);
|
String relativePath = getRelativePath(rootPath);
|
||||||
// 文件存储路径
|
// 文件存储路径
|
||||||
String fullPath = rootPath + relativePath + fileName;
|
String fullPath = rootPath + relativePath + fileName;
|
||||||
try (
|
BufferedOutputStream out=null;
|
||||||
FileOutputStream fileOutputStream = new FileOutputStream(new File(fullPath));
|
File targetFile = new File(fullPath);
|
||||||
BufferedOutputStream out = new BufferedOutputStream(fileOutputStream);
|
try{
|
||||||
) {
|
FileOutputStream fileOutputStream = new FileOutputStream(targetFile);
|
||||||
|
out = new BufferedOutputStream(fileOutputStream);
|
||||||
out.write(fileBytes);
|
out.write(fileBytes);
|
||||||
out.flush();
|
out.flush();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return null;
|
return null;
|
||||||
|
}finally {
|
||||||
|
try {
|
||||||
|
if (out != null) {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!CheckImgPath.isImageFile(targetFile)&&!CheckImgPath.isICON(targetFile)){
|
||||||
|
FileUtils.deleteQuietly(targetFile);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
// 访问的url
|
// 访问的url
|
||||||
String fileUrl = urlPrefix + relativePath + fileName;
|
String fileUrl = urlPrefix + relativePath + fileName;
|
||||||
|
|
@ -118,6 +133,7 @@ public class UploadFileUtil {
|
||||||
return fileUrl.replaceAll(BACKSLASH_REGEX, SLASH);
|
return fileUrl.replaceAll(BACKSLASH_REGEX, SLASH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取文件名称
|
* 获取文件名称
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,20 @@
|
||||||
package com.ruoyi.common.utils.http;
|
package com.ruoyi.common.utils.http;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.net.ssl.*;
|
||||||
|
import javax.servlet.http.Cookie;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.ConnectException;
|
import java.net.ConnectException;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.security.cert.X509Certificate;
|
import java.security.cert.X509Certificate;
|
||||||
import javax.net.ssl.HostnameVerifier;
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
|
||||||
import javax.net.ssl.SSLContext;
|
|
||||||
import javax.net.ssl.SSLSession;
|
|
||||||
import javax.net.ssl.TrustManager;
|
|
||||||
import javax.net.ssl.X509TrustManager;
|
|
||||||
import javax.servlet.http.Cookie;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用http发送方法
|
* 通用http发送方法
|
||||||
|
|
@ -316,10 +311,6 @@ public class HttpUtils
|
||||||
String xreq = request.getHeader("X-Requested-With");
|
String xreq = request.getHeader("X-Requested-With");
|
||||||
// 判断referer是不是为空
|
// 判断referer是不是为空
|
||||||
if (StringUtils.isNotEmpty(referer)) {
|
if (StringUtils.isNotEmpty(referer)) {
|
||||||
//线上入金通知接口不做拦截判断,特殊处理
|
|
||||||
if (reqUrl.indexOf("/notice/inMoneySuccessNotice") > 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// referer不为空,判断referer和当前请求是否同站点
|
// referer不为空,判断referer和当前请求是否同站点
|
||||||
if (!referer.startsWith(url, 8) && !referer.startsWith(url, 7)) {
|
if (!referer.startsWith(url, 8) && !referer.startsWith(url, 7)) {
|
||||||
// 不同站点--跨站请求
|
// 不同站点--跨站请求
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,216 @@
|
||||||
|
package com.ruoyi.common.utils.tree;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import com.ruoyi.common.base.BaseBean;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tree结构
|
||||||
|
*
|
||||||
|
* @author solo
|
||||||
|
* @date 2019/09/05.
|
||||||
|
*/
|
||||||
|
public class Ztree extends BaseBean {
|
||||||
|
private String id;
|
||||||
|
private String text;
|
||||||
|
private String state;
|
||||||
|
private boolean isParent;
|
||||||
|
private boolean checked;;
|
||||||
|
private int locked;
|
||||||
|
private List<Ztree> children;
|
||||||
|
private String iconCls;
|
||||||
|
private String pid;
|
||||||
|
private Map<String, Object> attributes = new HashMap<String, Object>();
|
||||||
|
private String comment;
|
||||||
|
private String link;
|
||||||
|
private String url;
|
||||||
|
private String target;
|
||||||
|
private Integer types;
|
||||||
|
private String code;
|
||||||
|
private String path;
|
||||||
|
private Date createtime;
|
||||||
|
private Date updatetime;
|
||||||
|
private String object_class;
|
||||||
|
private String title;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty(value = "isParent")
|
||||||
|
public boolean getIsParent() {
|
||||||
|
return isParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsParent(boolean isParent) {
|
||||||
|
this.isParent = isParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isChecked() {
|
||||||
|
return checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChecked(boolean checked) {
|
||||||
|
this.checked = checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLocked() {
|
||||||
|
return locked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocked(int locked) {
|
||||||
|
this.locked = locked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Ztree> getChildren() {
|
||||||
|
return children;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChildren(List<Ztree> children) {
|
||||||
|
this.children = children;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIconCls() {
|
||||||
|
return iconCls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIconCls(String iconCls) {
|
||||||
|
this.iconCls = iconCls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPid() {
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPid(String pid) {
|
||||||
|
this.pid = pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getAttributes() {
|
||||||
|
return attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttributes(Map<String, Object> attributes) {
|
||||||
|
this.attributes = attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getComment() {
|
||||||
|
return comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComment(String comment) {
|
||||||
|
this.comment = comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLink() {
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLink(String link) {
|
||||||
|
this.link = link;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTarget() {
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTarget(String target) {
|
||||||
|
this.target = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTypes() {
|
||||||
|
return types;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTypes(Integer types) {
|
||||||
|
this.types = types;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPath() {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPath(String path) {
|
||||||
|
this.path = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getCreatetime() {
|
||||||
|
return createtime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreatetime(Date createtime) {
|
||||||
|
this.createtime = createtime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getUpdatetime() {
|
||||||
|
return updatetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdatetime(Date updatetime) {
|
||||||
|
this.updatetime = updatetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getObject_class() {
|
||||||
|
return object_class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setObject_class(String object_class) {
|
||||||
|
this.object_class = object_class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package com.ruoyi.common.utils.tree;
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tree结构工具类
|
||||||
|
*
|
||||||
|
* @author solo
|
||||||
|
* @date 2010/09/05.
|
||||||
|
*/
|
||||||
|
public class ZtreeUtil {
|
||||||
|
|
||||||
|
public static List<Ztree> ztreeList(List<Ztree> list,String pid) {
|
||||||
|
List<Ztree> returnList = new ArrayList<Ztree>();
|
||||||
|
for (Ztree t : list) {
|
||||||
|
if (StringUtils.equals(t.getPid(), pid)) {
|
||||||
|
recursionFn(list, t);
|
||||||
|
returnList.add(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void recursionFn(List<Ztree> list, Ztree t) {
|
||||||
|
List<Ztree> childList = getChildList(list, t);// 得到子节点列表
|
||||||
|
t.setChildren(childList);
|
||||||
|
t.setState("open");
|
||||||
|
t.setIsParent(false);
|
||||||
|
for (Ztree tChild : childList) {
|
||||||
|
t.setState("closed");
|
||||||
|
t.setIsParent(true);
|
||||||
|
if (hasChild(list, tChild)) {// 判断是否有子节点
|
||||||
|
for (Ztree n : childList) {
|
||||||
|
recursionFn(list, n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 得到子节点列表
|
||||||
|
private static List<Ztree> getChildList(List<Ztree> list, Ztree t) {
|
||||||
|
List<Ztree> tlist = new ArrayList<Ztree>();
|
||||||
|
for (Ztree n : list) {
|
||||||
|
if (StringUtils.equals(n.getPid(), t.getId())) {
|
||||||
|
tlist.add(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否有子节点
|
||||||
|
private static boolean hasChild(List<Ztree> list, Ztree t) {
|
||||||
|
return getChildList(list, t).size() > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.ruoyi.common.utils.validate;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.validation.ConstraintViolation;
|
||||||
|
import javax.validation.Validation;
|
||||||
|
import javax.validation.Validator;
|
||||||
|
import javax.validation.ValidatorFactory;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bean验证
|
||||||
|
*
|
||||||
|
* @author solo
|
||||||
|
* @date 2019/09/05.
|
||||||
|
*/
|
||||||
|
public class ValidateUtil {
|
||||||
|
/**
|
||||||
|
* 验证参数是否合法(JSR303标准,参考地址:https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/)
|
||||||
|
*
|
||||||
|
* @param obj 校验对象
|
||||||
|
* @return 返回所有验证未通过的消息
|
||||||
|
*/
|
||||||
|
public static List<String> validate(Object obj) {
|
||||||
|
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
||||||
|
Validator validator = factory.getValidator();
|
||||||
|
Set<ConstraintViolation<Object>> violationSet = validator.validate(obj);
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
if (violationSet.size() > 0) {
|
||||||
|
for (ConstraintViolation violation : violationSet) {
|
||||||
|
list.add(violation.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue