JSD-8798 移动端单点+IP白名单
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.8 KiB

package com.fr.plugin.ipsso.utils;
import com.fr.data.NetworkHelper;
import com.fr.decision.webservice.v10.config.ConfigService;
import com.fr.decision.webservice.v10.login.TokenResource;
import com.fr.io.utils.ResourceIOUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.transform.FunctionRecorder;
import com.fr.stable.StringUtils;
import com.fr.third.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Properties;
@FunctionRecorder
public class IPWhiteUtils{
private static String ipWhite;
private static String servletName="decision";
public static boolean inWhite(HttpServletRequest req) {
try {
servletName = ConfigService.getInstance().getBasicParam().getServletPathName();
} catch (Exception e) {
FineLoggerFactory.getLogger().error("[ENC]获取servletName失败");
e.printStackTrace();
}
Properties pro = new Properties();
try {
pro.load(ResourceIOUtils.read("/resources/ip4enc.properties"));
FineLoggerFactory.getLogger().error("[ENC]IP白名单获取失败");
} catch (IOException e) {
e.printStackTrace();
}
ipWhite= pro.getProperty("ipWhite",StringUtils.EMPTY);
String ip= IPUtils.getRealIp(req);
//内网标记
boolean isInnerIPFlag= false;
try {
isInnerIPFlag = IPUtils.isInnerIP(ip,ipWhite);
} catch (IOException e) {
FineLoggerFactory.getLogger().error("[ENC]判断IP失败");
}
//移动设备标记
boolean isMobileFlag=NetworkHelper.getDevice(req).isMobile();
//移动端原生登陆标记
boolean isMobileLoginFlag=req.getRequestURI().contains(servletName+"/login") && !isInnerIPFlag;
//微信登陆标记
boolean isDingLoginFlag=req.getRequestURI().contains("weixin/single/login") && isMobileFlag;
String token = TokenResource.COOKIE.getToken(req);
//是否登陆标记
boolean isHasTokenFlag=!StringUtils.isEmpty(token) && IPUtils.checkTokenValid(req, token);
//移动端原生登陆标记
boolean isResourcesFlag=req.getRequestURI().contains(servletName+"/resources");
boolean isHasDingCookie=WebUtils.getCookie(req, "LOGIN_TYPE") != null;
FineLoggerFactory.getLogger().debug("[ENC]内网[{}]|移动设备[{}]|移动原生登陆[{}]|微信登陆[{}]|是否登陆[{}]|请求[{}]",isInnerIPFlag,isMobileFlag,isMobileLoginFlag,isDingLoginFlag,isHasTokenFlag,req.getRequestURI());
if(isInnerIPFlag || isResourcesFlag || isHasDingCookie){
return true;
}
else if(isDingLoginFlag){
return true;
} else{
return false;
}
}
}