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.

157 lines
5.9 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package weaver.filter;
import com.weaver.file.Prop;
import weaver.general.BaseBean;
import weaver.general.StringUtil;
import weaver.general.Util;
import javax.servlet.*;
import javax.servlet.http.Cookie;
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.") == -1){
// String currentDateTime = request.getHeader("currentDateTime");
// String MdToken = request.getHeader("MdToken");
String currentDateTime = getCookie(request,"currentDateTime");
String MdToken = getCookie(request,"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();
// System.out.println(difference);
// 10分钟 = 10 * 60 * 1000 毫秒
if ( Math.abs(difference) > 5 * 60 * 1000) {
return true;
} else {
return false;
}
} catch (Exception e) {
//报错也返回大于10分钟
e.printStackTrace();
return true;
}
}
private String getCookie(HttpServletRequest request,String name){
try {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if(name.equals(cookie.getName())){
return Util.null2String(cookie.getValue());
}
}
}
}catch (Exception e){
new BaseBean().writeLog("getCookieError:"+e.getMessage());
e.printStackTrace();
}
return "";
}
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);
System.out.println(DateExample("20240613071112"));
;
}
}