mirror of
https://github.com/Hello-hao/Tbed.git
synced 2024-04-21 12:32:10 +00:00
2021-03-25更新添加打印相关日志
删除无用注释代码
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package cn.hellohao.interceptor;
|
||||
|
||||
import cn.hellohao.pojo.User;
|
||||
import cn.hellohao.service.impl.UserServiceImpl;
|
||||
import cn.hellohao.utils.SpringContextHolder;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Component
|
||||
public class InterceptorConfigWeb implements HandlerInterceptor {
|
||||
//private static final Logger log = LoggerFactory.getLogger(InterceptorConfig.class);
|
||||
|
||||
/**
|
||||
* 进入controller层之前拦截请求
|
||||
*/
|
||||
//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
//设置请求头
|
||||
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
response.setHeader("Pragma", "no-cache");
|
||||
response.setHeader("Expires", "0");
|
||||
response.setHeader("Last-Modified", new Date().toString());
|
||||
response.setHeader("ETag", String.valueOf(System.currentTimeMillis()));
|
||||
|
||||
UserServiceImpl userService = SpringContextHolder.getBean(UserServiceImpl.class);
|
||||
HttpSession session = request.getSession();
|
||||
//这里的User是登陆时放入session的
|
||||
User user = (User) session.getAttribute("user");
|
||||
if(user==null){
|
||||
Cookie[] cookies = request.getCookies();
|
||||
String Hellohao_UniqueUserKey = "";
|
||||
if(cookies!=null){
|
||||
for (Cookie cookie : cookies) {
|
||||
if(cookie.getName().equals("Hellohao_UniqueUserKey") && Hellohao_UniqueUserKey.equals("")){
|
||||
Hellohao_UniqueUserKey = URLDecoder.decode(cookie.getValue(), "GBK");
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Hellohao_UniqueUserKey!=null && !Hellohao_UniqueUserKey.equals("")){
|
||||
//String basepass = Base64Encryption.encryptBASE64(pass.getBytes());
|
||||
Integer ret = userService.login(null, null,Hellohao_UniqueUserKey);
|
||||
if (ret > 0) {
|
||||
User u = userService.getUsersMail(Hellohao_UniqueUserKey);
|
||||
if (u.getIsok() == 1) {
|
||||
session.setAttribute("user", u);
|
||||
session.setAttribute("email", u.getEmail());
|
||||
//request.getRequestDispatcher("/admin/goadmin").forward(request, response);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
|
||||
}
|
||||
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package cn.hellohao.interceptor;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.annotation.WebFilter;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
/**
|
||||
* XSS过滤器
|
||||
* @author hellohao
|
||||
*/
|
||||
@WebFilter(filterName="xssFilter",urlPatterns = { "/SaveForAlbum","/register" })//"/*"为所有请求
|
||||
public class XssFilter implements Filter {
|
||||
|
||||
@Override
|
||||
public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
|
||||
HttpServletRequest request = (HttpServletRequest)servletRequest;
|
||||
String path = request.getServletPath();
|
||||
//由于我的@WebFilter注解配置的是urlPatterns="/*"(过滤所有请求),所以这里对不需要过滤的静态资源url,作忽略处理(大家可以依照具体需求配置)
|
||||
String[] exclusionsUrls = {".js",".gif",".jpg",".png",".bmp",".css",".ico"};//,"/","/index","/admin/root/"
|
||||
for (String str : exclusionsUrls) {
|
||||
System.out.println(path.contains(str));
|
||||
if (path.contains(str)) {
|
||||
filterChain.doFilter(servletRequest,servletResponse);
|
||||
return;
|
||||
}
|
||||
}
|
||||
filterChain.doFilter(new XssHttpServletRequestWrapper(request),servletResponse);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package cn.hellohao.interceptor;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.apache.commons.text.StringEscapeUtils;
|
||||
import javax.servlet.ReadListener;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
import java.io.*;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
/**
|
||||
* ServletRequest包装类,对request做XSS过滤处理
|
||||
* @author Hellohao
|
||||
*/
|
||||
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
|
||||
|
||||
public XssHttpServletRequestWrapper(HttpServletRequest request) {
|
||||
super(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHeader(String name) {
|
||||
return StringEscapeUtils.escapeHtml4(super.getHeader(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQueryString() {
|
||||
return StringEscapeUtils.escapeHtml4(super.getQueryString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getParameter(String name) {
|
||||
return StringEscapeUtils.escapeHtml4(super.getParameter(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getParameterValues(String name) {
|
||||
String[] values = super.getParameterValues(name);
|
||||
if(values != null) {
|
||||
int length = values.length;
|
||||
String[] escapseValues = new String[length];
|
||||
for(int i = 0; i < length; i++){
|
||||
escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);
|
||||
}
|
||||
return escapseValues;
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServletInputStream getInputStream() throws IOException {
|
||||
String str=getRequestBody(super.getInputStream());
|
||||
Map<String,Object> map= JSON.parseObject(str,Map.class);
|
||||
Map<String,Object> resultMap=new HashMap<>(map.size());
|
||||
for(String key:map.keySet()){
|
||||
Object val=map.get(key);
|
||||
if(map.get(key) instanceof String){
|
||||
resultMap.put(key,StringEscapeUtils.escapeHtml4(val.toString()));
|
||||
}else{
|
||||
resultMap.put(key,val);
|
||||
}
|
||||
}
|
||||
str=JSON.toJSONString(resultMap);
|
||||
final ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
|
||||
return new ServletInputStream() {
|
||||
@Override
|
||||
public int read() throws IOException {
|
||||
return bais.read();
|
||||
}
|
||||
@Override
|
||||
public boolean isFinished() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean isReady() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public void setReadListener(ReadListener listener) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private String getRequestBody(InputStream stream) {
|
||||
String line = "";
|
||||
StringBuilder body = new StringBuilder();
|
||||
int counter = 0;
|
||||
|
||||
// 读取POST提交的数据内容
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, Charset.forName("UTF-8")));
|
||||
try {
|
||||
while ((line = reader.readLine()) != null) {
|
||||
body.append(line);
|
||||
counter++;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return body.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package cn.hellohao.pojo;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @author Hellohao
|
||||
* @version 1.0
|
||||
* @date 2020-04-04 2:12
|
||||
*/
|
||||
public class FixedResources {
|
||||
public static final String LOCPATH = File.separator + "HellohaoData";
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
package cn.hellohao.service.impl;
|
||||
|
||||
import cn.hellohao.pojo.Keys;
|
||||
import cn.hellohao.pojo.ReturnImage;
|
||||
import cn.hellohao.pojo.UploadConfig;
|
||||
import cn.hellohao.utils.*;
|
||||
import com.UpYun;
|
||||
import com.aliyun.oss.model.ObjectMetadata;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class UFileImageupload {
|
||||
static UpYun uFile;
|
||||
static Keys key;
|
||||
|
||||
public Map<ReturnImage, Integer> ImageuploadUSS(Map<String, MultipartFile> fileMap, String username,
|
||||
Map<String, String> fileMap2,Integer setday) {
|
||||
if(fileMap2==null){
|
||||
File file = null;
|
||||
Map<ReturnImage, Integer> ImgUrl = new HashMap<>();
|
||||
ObjectMetadata meta = new ObjectMetadata();
|
||||
meta.setHeader("Content-Disposition", "inline");
|
||||
|
||||
try {
|
||||
for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
|
||||
String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位
|
||||
java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss");
|
||||
String times = format1.format(new Date());
|
||||
file = SetFiles.changeFile(entry.getValue());
|
||||
uFile.setContentMD5(UpYun.md5(file));
|
||||
boolean result = uFile.writeFile(username + "/" + uuid+times + "." + entry.getKey(), file, true);
|
||||
if(result){
|
||||
ReturnImage returnImage = new ReturnImage();
|
||||
returnImage.setImgname(username + "/" + uuid+times + "." + entry.getKey());//entry.getValue().getOriginalFilename()
|
||||
returnImage.setImgurl(key.getRequestAddress() + "/" +username + "/" + uuid+times + "." + entry.getKey());//key.getRequestAddress() + "/" +
|
||||
ImgUrl.put(returnImage, (int) (entry.getValue().getSize()));
|
||||
if(setday>0) {
|
||||
String deleimg = DateUtils.plusDay(setday);
|
||||
DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "3");
|
||||
}
|
||||
}else{
|
||||
System.err.println("上传失败");
|
||||
}
|
||||
}
|
||||
}catch(Exception e){
|
||||
ImgUrl.put(null, 500);
|
||||
}
|
||||
return ImgUrl;
|
||||
}else{
|
||||
Map<ReturnImage, Integer> ImgUrl = new HashMap<>();
|
||||
ObjectMetadata meta = new ObjectMetadata();
|
||||
meta.setHeader("Content-Disposition", "inline");
|
||||
|
||||
try {
|
||||
for (Map.Entry<String, String> entry : fileMap2.entrySet()) {
|
||||
String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位
|
||||
java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss");
|
||||
String times = format1.format(new Date());
|
||||
String imgurl = entry.getValue();
|
||||
uFile.setContentMD5(UpYun.md5(new File(imgurl)));
|
||||
boolean result = uFile.writeFile(username + "/" + uuid+times + "." + entry.getKey(), new File(imgurl), true);
|
||||
if(result){
|
||||
ReturnImage returnImage = new ReturnImage();
|
||||
returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey());
|
||||
ImgUrl.put(returnImage, ImgUrlUtil.getFileSize2(new File(imgurl)));
|
||||
if(setday>0) {
|
||||
String deleimg = DateUtils.plusDay(setday);
|
||||
DeleImg.charu(username + "/" + uuid + times + "." + entry.getKey() + "|" + deleimg + "|" + "3");
|
||||
}
|
||||
}else{
|
||||
Print.warning("上传失败");
|
||||
}
|
||||
new File(imgurl).delete();
|
||||
}
|
||||
}catch(Exception e){
|
||||
ImgUrl.put(null, 500);
|
||||
}
|
||||
return ImgUrl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// // 转换文件方法
|
||||
// private File changeFile(MultipartFile multipartFile) throws Exception {
|
||||
// // 获取文件名
|
||||
// String fileName = multipartFile.getName();//getOriginalFilename
|
||||
// // 获取文件后缀
|
||||
// String prefix = fileName.substring(fileName.lastIndexOf("."));
|
||||
// // todo 修改临时文件文件名
|
||||
// File file = File.createTempFile(fileName, prefix);
|
||||
// // MultipartFile to File
|
||||
// multipartFile.transferTo(file);
|
||||
// return file;
|
||||
// }
|
||||
|
||||
//ufile初始化
|
||||
public static Integer Initialize(Keys k) {
|
||||
int ret = -1;
|
||||
if(k.getEndpoint()!=null && k.getAccessSecret()!=null
|
||||
&& k.getBucketname()!=null && k.getRequestAddress()!=null ) {
|
||||
if(!k.getEndpoint().equals("") && !k.getAccessSecret().equals("")
|
||||
&& !k.getBucketname().equals("") && !k.getRequestAddress().equals("") ) {
|
||||
// 初始化
|
||||
// 创建UpYun实例。
|
||||
uFile = new UpYun(k.getBucketname(), k.getAccessKey(), k.getAccessSecret());
|
||||
List<UpYun.FolderItem> items = null;
|
||||
try {
|
||||
items = uFile.readDir("/",null);
|
||||
key = k;
|
||||
ret = 1;
|
||||
} catch (Exception e) {
|
||||
System.out.println("UFile - Waiting for configuration");
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 客户端接口
|
||||
* */
|
||||
public Map<ReturnImage, Integer> clientuploadUSS(Map<String, MultipartFile> fileMap, String username, UploadConfig uploadConfig) throws Exception {
|
||||
File file = null;
|
||||
Map<ReturnImage, Integer> ImgUrl = new HashMap<>();
|
||||
//设置Header
|
||||
ObjectMetadata meta = new ObjectMetadata();
|
||||
meta.setHeader("Content-Disposition", "inline");
|
||||
for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
|
||||
String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0,5);//生成一个没有-的uuid,然后取前5位
|
||||
java.text.DateFormat format1 = new java.text.SimpleDateFormat("MMddhhmmss");
|
||||
String times = format1.format(new Date());
|
||||
file = SetFiles.changeFile_c(entry.getValue());
|
||||
// 上传文件流。
|
||||
System.out.println("客户端:待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey());
|
||||
ReturnImage returnImage = new ReturnImage();
|
||||
if(entry.getValue().getSize()/1024<=uploadConfig.getFilesizeuser()*1024){
|
||||
// 例2:采用数据流模式上传文件(节省内存),自动创建父级目录
|
||||
uFile.setContentMD5(UpYun.md5(file));
|
||||
boolean result = uFile.writeFile(username + "/" + uuid+times + "." + entry.getKey(), file, true);
|
||||
if(result){
|
||||
returnImage.setImgname(entry.getValue().getOriginalFilename());
|
||||
returnImage.setImgurl(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey());
|
||||
ImgUrl.put(returnImage, (int) (entry.getValue().getSize()));
|
||||
|
||||
//ImgUrl.put(key.getRequestAddress() + "/" + username + "/" + uuid+times + "." + entry.getKey(), (int) (entry.getValue().getSize()));
|
||||
}else{
|
||||
System.err.println("上传失败");
|
||||
}
|
||||
}else{
|
||||
returnImage.setImgname(entry.getValue().getOriginalFilename());
|
||||
returnImage.setImgurl("文件超出系统设定大小,不得超过");
|
||||
ImgUrl.put(returnImage, -1);
|
||||
}
|
||||
}
|
||||
return ImgUrl;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package cn.hellohao.utils;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
|
||||
public class TestUrl {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
//testUrl("http://1.3.3.3/test");
|
||||
//最好使用下面这个,上面那个超时时间不定,所以可能会导致卡住的情况
|
||||
testUrlWithTimeOut("http://tc.hellohao.cn2/getNoticeText", 2000);
|
||||
}
|
||||
|
||||
public static void testUrl(String urlString){
|
||||
|
||||
long lo = System.currentTimeMillis();
|
||||
URL url;
|
||||
try {
|
||||
url = new URL(urlString);
|
||||
InputStream in = url.openStream();
|
||||
System.out.println("连接可用");
|
||||
} catch (Exception e1) {
|
||||
System.out.println("连接打不开!");
|
||||
url = null;
|
||||
}
|
||||
|
||||
System.out.println(System.currentTimeMillis()-lo);
|
||||
}
|
||||
|
||||
public static boolean testUrlWithTimeOut(String urlString,int timeOutMillSeconds){
|
||||
long lo = System.currentTimeMillis();
|
||||
URL url;
|
||||
try {
|
||||
url = new URL(urlString);
|
||||
URLConnection co = url.openConnection();
|
||||
co.setConnectTimeout(timeOutMillSeconds);
|
||||
co.connect();
|
||||
return true;
|
||||
//System.out.println("连接可用");
|
||||
} catch (Exception e1) {
|
||||
//System.out.println("连接打不开!");
|
||||
url = null;
|
||||
return false;
|
||||
}
|
||||
//System.out.println(System.currentTimeMillis()-lo);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user