You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
5.0 KiB
Java

2 years ago
package weaver.filter;
import com.weaver.file.Prop;
import weaver.general.BaseBean;
import weaver.general.StringUtil;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class LoginEMFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
String isopen = Prop.getPropValue("emloginFilter", "isopen");
if ("1".equals(isopen)){
try {
HttpServletRequest request = (HttpServletRequest) servletRequest;
StringBuffer url = request.getRequestURL();
new BaseBean().writeLog("请求地址====>getRequestURL" + url);
//内网请求
if(url.indexOf("14.1.209.146:8080") == -1){
String currentDateTime = request.getHeader("currentDateTime");
String MdToken = request.getHeader("MdToken");
new BaseBean().writeLog("请求地址====>currentDateTime" + currentDateTime);
new BaseBean().writeLog("请求地址====>MdToken" + MdToken);
if (StringUtil.isEmpty(currentDateTime)||StringUtil.isEmpty(MdToken)){
// 如果条件满足发送HTTP 500错误
((HttpServletResponse) servletResponse).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error");
return;
}
//大于十分钟返回报错
boolean b = DateExample(currentDateTime);
if (b){
new BaseBean().writeLog("请求地址====>时间异常" + b);
((HttpServletResponse) servletResponse).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error");
return;
}
String password = "ecologytq33q#LzDw$98HwEA@"+currentDateTime;
new BaseBean().writeLog("请求地址====>toMD5(password)" + toMD5(password));
if (!(toMD5(password).toLowerCase().equals(MdToken))){
new BaseBean().writeLog("请求地址====>密码错误" +MdToken);
((HttpServletResponse) servletResponse).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error");
return;
}else {
filterChain.doFilter(servletRequest, servletResponse);
}
}else {
filterChain.doFilter(servletRequest, servletResponse);
}
} catch (Exception e) {
new BaseBean().writeLog("请求地址====>error" + e.getMessage());
}
}else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
}
public static String toMD5(String input) {
try {
// 创建MessageDigest实例指定MD5算法
MessageDigest md = MessageDigest.getInstance("MD5");
// 更新MessageDigest对象以包含要加密的字节
md.update(input.getBytes());
// 完成哈希计算
byte[] digest = md.digest();
// 将哈希值转换为十六进制字符串
StringBuilder hexString = new StringBuilder();
for (byte b : digest) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {hexString.append('0');}
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
public static boolean DateExample (String dateTimeStr) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date parsedDate = sdf.parse(dateTimeStr);
Date currentDate = new Date();
long difference = currentDate.getTime() - parsedDate.getTime();
if (difference > 10 * 60 * 1000) { // 10分钟 = 10 * 60 * 1000 毫秒
return true;
} else {
return false;
}
} catch (Exception e) {
//报错也返回大于10分钟
e.printStackTrace();
return true;
}
}
public static void main(String[] args) {
String originalString = "tq33q#LzDw$98HwEA@";
String md5String = toMD5(originalString);
System.out.println("Original: " + originalString);
System.out.println("MD5 Hash: " + md5String);
}
}