/*
* 文件名: TSP
* 版权: Copyright 2000-2010 Huawei Tech. Co. Ltd. All Rights Reserved.
* 创建人: 005932
* 文件描述:
* 修改时间: 2009-9-10 下午08:04:15
* 修改内容: 新增
*/
package com.huawei.src.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import com.huawei.src.common.exception.SRCportalException;
import com.huawei.src.util.config.ConfigHelper;
import com.huawei.src.util.constant.SystemConstant;
/**
* TSP 工具类
*
* @author 005932
* @version srcms V2R1C01B01
*/
public abstract class SRCportalUtils
{
private static final Logger logger = Logger.getLogger(SRCportalUtils.class);
private static final char[] PARAM = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A',
'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z'};
private final static Map<String, Pattern> REGMAP = new HashMap<String, Pattern>();
static
{
REGMAP.put("*", Pattern.compile("\\*+"));
REGMAP.put("?", Pattern.compile("\\?+"));
REGMAP.put("+", Pattern.compile("\\++"));
}
/**
* 判断字符串是否为空
*
* @param str
* @return
*/
public static boolean isNull(String str)
{
return (null == str || "".equals(str.trim())) ? true : false;
}
/**
*
* 方法表述 判断列表是否为空
* @param list
* @return boolean
*/
public static boolean isListNull(List<?> list)
{
return (list == null || list.isEmpty());
}
/**
*
* 方法表述 判断列表是否为空
* @param list
* @return boolean
*/
public static boolean isMapNull(Map<?, ?> map)
{
return (map == null || map.isEmpty());
}
/**
* 转义正则表达式的元字符 \ . $ ^ [ ] { } | + ?
*/
public static Pattern transferReg(String reg)
{
Pattern pattern = null;
String regString = reg;
if (!Utils.isNull(reg))
{
for (Map.Entry<String, Pattern> mapEntry : REGMAP.entrySet())
{
if (regString.startsWith(mapEntry.getKey()))
{
regString = "." + mapEntry.getKey() + regString.substring(1);
break;
}
}
try
{
pattern = Pattern.compile(regString, Pattern.CASE_INSENSITIVE);
}
catch (Throwable e)
{
logger.error("Prepare to compile regex failed, pattern syntax error, reg string is " + reg
+ ", message:" + e.getMessage());
}
}
return pattern;
}
/**
*
* 获取加密方式
*
* @return String
*/
public static String getEncryptType()
{
String type = ConfigHelper.getString(SystemConstant.SRCMS_ENCRYPTION_TYPE);
if (!"MD5".equals(type.toLowerCase(Locale.US)) && !"SHA256".equals(type.toLowerCase(Locale.US)))
{
type = "MD5";
}
return type;
}
/**
* 校验srcms和tds是否在同一个网段内
* @param srcmsUrl srcms的内网地址
* @param url 同步tds的地址
* @return boolean false : 不在同一个网段内 true :在同一个网段内
*/
public static boolean validateIp(String srcmsUrl, String url)
{
boolean flag = false;
if (StringUtils.isNotBlank(srcmsUrl) && StringUtils.isNotBlank(url))
{
if (srcmsUrl.indexOf("localhost") != -1)
{
flag = true;
return flag;
}
String srcmsUrlSub = srcmsUrl.substring(srcmsUrl.indexOf("//") + 2, srcmsUrl.indexOf("."));
String urlSub = url.substring(url.indexOf("//") + 2, url.indexOf("."));
if (srcmsUrlSub.equals(urlSub) || "10".equals(urlSub) || "172".equals(urlSub) || "192".equals(urlSub))
{
flag = true;
}
}
return flag;
}
/**
*
* 防止HTML、sql注入。
*
* @param src
* @return
*/
public static String escapeSpecialString(String src)
{
if (!SRCportalUtils.isNull(src))
{
src = src.trim();
// str含有HTML标签的文本
src = src.replace("<", "<");
src = src.replace(">", ">");
// src = src.replace("\n", "<br>");
src = src.replace("\"", """);
src = src.replace("\'", "'");
// sql
src = StringEscapeUtils.escapeSql(src);
}
return src;
}
/**
* 防止sql注入
*
* @param src
* @return
*/
public static String escapeSqlString(String src)
{
src = src.trim();
src = StringEscapeUtils.escapeSql(src);
return src;
}
/**
*
* 函数把一些预定义的字符转换为 HTML 实体。
* 预定义的字符是:
* & (和号) 成为 &
* " (双引号) 成为 "
* ' (单引号) 成为 '
* < (小于) 成为 <
* > (大于) 成为 >
*
* @param src
* @return
*/
public static String escapeHtmlString(String src)
{
src = src.trim();
src = StringEscapeUtils.escapeHtml(src);
return src;
}
/**
* 生成size位数的[0-9a-zA-Z]随机数
* @param size
* @return
*/
public static String generateRand(int size)
{
SecureRandom ran = new SecureRandom();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++)
{
char temp = PARAM[Math.abs((ran.nextInt()) % 62)];
while (sb.indexOf(String.valueOf(temp)) != -1)
{
temp = PARAM[Math.abs((ran.nextInt()) % 62)];
}
sb.append(temp).append("");
}
return sb.toString();
}
/**
* JSON非法字符处理
* @author z00194399
*
* filter sensitive data to prevent cross-site scripting
*/
public static String xssfilterForJson(String value)
{
if (null == value)
{
return null;
}
StringBuffer result = new StringBuffer(value.length());
for (int i = 0; i < value.length(); ++i)
{
switch (value.charAt(i))
{
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '\'':
result.append("'");
break;
case '%':
result.append("%");
break;
case ';':
result.append(";");
break;
case '(':
result.append("(");
break;
case ')':
result.append(")");
break;
case '&':
result.append("&");
break;
case '+':
result.append("+");
break;
default:
result.append(value.charAt(i));
break;
}
}
return result.toString().replaceAll("\\\\\"", """);
}
/**
* 跨站脚本非法字符处理
* @author z00194399
*
* filter sensitive data to prevent cross-site scripting
*/
public static String xssfilter(String value)
{
if (null == value)
{
return null;
}
StringBuffer result = new StringBuffer(value.length());
for (int i = 0; i < value.length(); ++i)
{
switch (value.charAt(i))
{
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '"':
result.append(""");
break;
case '\'':
result.append("'");
break;
case '%':
result.append("%");
break;
case ';':
result.append(";");
break;
case '(':
result.append("(");
break;
case ')':
result.append(")");
break;
case '&':
result.append("&");
break;
case '+':
result.append("+");
break;
default:
result.append(value.charAt(i));
break;
}
}
return result.toString();
}
/**
* 校验输入\输出字符合法性
* @param inputStr
* @return
*/
public static String validateChar(String regStr, String inputStr)
{
String result = null;
if (Utils.isNull(inputStr))
{
return inputStr;
}
if (isNull(regStr))
{
regStr = SystemConstant.DEFAULT_CHAR;
}
Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.find())
{
result = matcher.group();
}
else
{
result = "invalid chars";
}
return result;
}
/**
* 用UUID生成一个唯一token
* @return
*/
public static synchronized String generateToken()
{
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
/**
* 判断是否存在非法csrf
* @param request
* @return
*/
public static boolean validateCSRF(HttpServletRequest request)
{
boolean ret = false;
String sToken = (String)request.getSession().getAttribute(SystemConstant.CSRFTOKEN);
String rToken = request.getParameter("csrf_token");
if (null != sToken && null != rToken && sToken.equals(rToken))
{
ret = true;
}
// token不管使用通过与否,被验证过都注销更新
String csrfToken = "csrf-" + SRCportalUtils.generateToken();
request.getSession().removeAttribute(SystemConstant.CSRFTOKEN);
request.getSession().setAttribute(SystemConstant.CSRFTOKEN, csrfToken);
return ret;
}
/**
* 校验请求是否可能来自跨站referer
* @param referer
* @return
*/
public static boolean identifyReferer(String referer)
{
String credit = ConfigHelper.getString("srcmsreferer");
// 如果不配置,认为不校验referer,返回true
if (isNull(credit))
{
return true;
}
String domain = getHost(referer);
if (null == domain)
{
logger.error("Get host from referer failed.");
}
else
{
List<String> list = Arrays.asList(credit.split(";"));
if (list.contains(domain))
{
return true;
}
}
return false;
}
/**
* 获取主机
*
* @param referrer
* @return
*
*/
private static String getHost(final String referer)
{
if (null == referer)
{
return null;
}
int position = referer.indexOf("://");
if (position == -1)
{
return null;
}
int startPos = position + 3;
int paramStartPos = referer.indexOf('?');
String hostAndPath = (paramStartPos == -1 ? referer : referer.substring(0, paramStartPos));
int endPos = hostAndPath.indexOf('/', startPos);
String hostPart = (endPos == -1 ? hostAndPath.substring(startPos) : hostAndPath.substring(startPos, endPos));
String host = null;
int hostNameEndPos = hostPart.lastIndexOf(':');
if (hostNameEndPos == -1)
{
host = hostPart;
}
else
{
host = hostPart.substring(0, hostNameEndPos);
}
return host;
}
/**
* 加固密码复杂度,至少8个字符,英文、数字、其它字符各至少出现一次
* @param pwd
* @return
*/
public static boolean checkPassword(String pwd)
{
if (pwd.length() < 8)
{
return false;
}
else
{
int passPower = 0;
Pattern pattern1 = Pattern.compile("(?=.*[^0-9A-Za-z]).{8,}");
Matcher m1 = pattern1.matcher(pwd);
if (m1.matches())
passPower++;
Pattern pattern2 = Pattern.compile("(?=.*\\d).{8,}");
Matcher m2 = pattern2.matcher(pwd);
if (m2.matches())
passPower++;
Pattern pattern3 = Pattern.compile("(?=.*[A-Za-z]).{8,}");
Matcher m3 = pattern3.matcher(pwd);
if (m3.matches())
passPower++;
if (passPower < 3)
{
return false;
}
}
return true;
}
/**
* 生成唯一的ID
* @param type reserved
* @return ID
*/
public static synchronized String getUUID(String type)
{
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
UUID uuid = UUID.randomUUID();
StringBuffer sb = new StringBuffer();
sb.append(type);
sb.append(format.format(new Date()));
String uid = uuid.toString().replace("-", "").substring(0, 6).toUpperCase(Locale.US);
sb.append(uid);
return sb.toString();
}
/**
* 获取通用文件字节大小
* 默认最大10M
*
* @return
*
*/
public static long getCommonFileByteSize()
{
long maxsize = ConfigHelper.getLong("commons.multipart.maxSize", 10485760l);
return maxsize;
}
/**
* 判断上传的文件类型是否支持
*
* @param fileName
* @param supportTypes
* @return
*
*/
public static boolean isUploadFileTypeSupport(String fileName, String[] supportTypes)
{
for (String fileType : supportTypes)
{
if (fileName.endsWith(fileType))
{
return true;
}
}
return false;
}
/**
* 获取请求的URI
*
* @param request
* @return
*
*/
public static String getRequestUri(HttpServletRequest request)
{
String uri = request.getServletPath();
String pathInfo = request.getPathInfo();
if (pathInfo != null)
{
uri = uri + pathInfo;
}
return uri;
}
/**
* 获取请求IP地址
*
* @param req
* @return
*
*/
public static String getRequestIP(ServletRequest req)
{
HttpServletRequest request = null;
if (req instanceof HttpServletRequest)
{
request = (HttpServletRequest)req;
}
if (null == request)
{
logger.error("HttpServletRequest is null.");
return null;
}
String requestIP = request.getHeader("x-forwarded-for");
if (requestIP == null || requestIP.length() == 0 || "unknown".equalsIgnoreCase(requestIP))
{
requestIP = request.getHeader("Proxy-Client-IP");
}
if (requestIP == null || requestIP.length() == 0 || "unknown".equalsIgnoreCase(requestIP))
{
requestIP = request.getHeader("WL-Proxy-Client-IP");
}
if (requestIP == null || requestIP.length() == 0 || "unknown".equalsIgnoreCase(requestIP))
{
requestIP = request.getRemoteAddr();
}
return requestIP;
}
/**
* 获取请求body
*
* @param req
* @return
* @throws TQSException
*
*/
public static String getRequestBody(ServletRequest req) throws SRCportalException
{
String requestBody = null;
ByteArrayOutputStream ostream = null;
try
{
// 获得消息体
byte[] buffer = new byte[1024];
InputStream istream = req.getInputStream();
ostream = new ByteArrayOutputStream();
int byteread = istream.read(buffer);
while (byteread != -1)
{
ostream.write(buffer, 0, byteread);
byteread = istream.read(buffer);
}
requestBody = new String(ostream.toString("UTF-8"));
}
catch (IOException e)
{
throw new SRCportalException("Read request stream data failed.", e);
}
finally
{
IOUtils.closeQuietly(ostream);
}
return requestBody;
}
}
* 文件名: TSP
* 版权: Copyright 2000-2010 Huawei Tech. Co. Ltd. All Rights Reserved.
* 创建人: 005932
* 文件描述:
* 修改时间: 2009-9-10 下午08:04:15
* 修改内容: 新增
*/
package com.huawei.src.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import com.huawei.src.common.exception.SRCportalException;
import com.huawei.src.util.config.ConfigHelper;
import com.huawei.src.util.constant.SystemConstant;
/**
* TSP 工具类
*
* @author 005932
* @version srcms V2R1C01B01
*/
public abstract class SRCportalUtils
{
private static final Logger logger = Logger.getLogger(SRCportalUtils.class);
private static final char[] PARAM = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A',
'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z'};
private final static Map<String, Pattern> REGMAP = new HashMap<String, Pattern>();
static
{
REGMAP.put("*", Pattern.compile("\\*+"));
REGMAP.put("?", Pattern.compile("\\?+"));
REGMAP.put("+", Pattern.compile("\\++"));
}
/**
* 判断字符串是否为空
*
* @param str
* @return
*/
public static boolean isNull(String str)
{
return (null == str || "".equals(str.trim())) ? true : false;
}
/**
*
* 方法表述 判断列表是否为空
* @param list
* @return boolean
*/
public static boolean isListNull(List<?> list)
{
return (list == null || list.isEmpty());
}
/**
*
* 方法表述 判断列表是否为空
* @param list
* @return boolean
*/
public static boolean isMapNull(Map<?, ?> map)
{
return (map == null || map.isEmpty());
}
/**
* 转义正则表达式的元字符 \ . $ ^ [ ] { } | + ?
*/
public static Pattern transferReg(String reg)
{
Pattern pattern = null;
String regString = reg;
if (!Utils.isNull(reg))
{
for (Map.Entry<String, Pattern> mapEntry : REGMAP.entrySet())
{
if (regString.startsWith(mapEntry.getKey()))
{
regString = "." + mapEntry.getKey() + regString.substring(1);
break;
}
}
try
{
pattern = Pattern.compile(regString, Pattern.CASE_INSENSITIVE);
}
catch (Throwable e)
{
logger.error("Prepare to compile regex failed, pattern syntax error, reg string is " + reg
+ ", message:" + e.getMessage());
}
}
return pattern;
}
/**
*
* 获取加密方式
*
* @return String
*/
public static String getEncryptType()
{
String type = ConfigHelper.getString(SystemConstant.SRCMS_ENCRYPTION_TYPE);
if (!"MD5".equals(type.toLowerCase(Locale.US)) && !"SHA256".equals(type.toLowerCase(Locale.US)))
{
type = "MD5";
}
return type;
}
/**
* 校验srcms和tds是否在同一个网段内
* @param srcmsUrl srcms的内网地址
* @param url 同步tds的地址
* @return boolean false : 不在同一个网段内 true :在同一个网段内
*/
public static boolean validateIp(String srcmsUrl, String url)
{
boolean flag = false;
if (StringUtils.isNotBlank(srcmsUrl) && StringUtils.isNotBlank(url))
{
if (srcmsUrl.indexOf("localhost") != -1)
{
flag = true;
return flag;
}
String srcmsUrlSub = srcmsUrl.substring(srcmsUrl.indexOf("//") + 2, srcmsUrl.indexOf("."));
String urlSub = url.substring(url.indexOf("//") + 2, url.indexOf("."));
if (srcmsUrlSub.equals(urlSub) || "10".equals(urlSub) || "172".equals(urlSub) || "192".equals(urlSub))
{
flag = true;
}
}
return flag;
}
/**
*
* 防止HTML、sql注入。
*
* @param src
* @return
*/
public static String escapeSpecialString(String src)
{
if (!SRCportalUtils.isNull(src))
{
src = src.trim();
// str含有HTML标签的文本
src = src.replace("<", "<");
src = src.replace(">", ">");
// src = src.replace("\n", "<br>");
src = src.replace("\"", """);
src = src.replace("\'", "'");
// sql
src = StringEscapeUtils.escapeSql(src);
}
return src;
}
/**
* 防止sql注入
*
* @param src
* @return
*/
public static String escapeSqlString(String src)
{
src = src.trim();
src = StringEscapeUtils.escapeSql(src);
return src;
}
/**
*
* 函数把一些预定义的字符转换为 HTML 实体。
* 预定义的字符是:
* & (和号) 成为 &
* " (双引号) 成为 "
* ' (单引号) 成为 '
* < (小于) 成为 <
* > (大于) 成为 >
*
* @param src
* @return
*/
public static String escapeHtmlString(String src)
{
src = src.trim();
src = StringEscapeUtils.escapeHtml(src);
return src;
}
/**
* 生成size位数的[0-9a-zA-Z]随机数
* @param size
* @return
*/
public static String generateRand(int size)
{
SecureRandom ran = new SecureRandom();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++)
{
char temp = PARAM[Math.abs((ran.nextInt()) % 62)];
while (sb.indexOf(String.valueOf(temp)) != -1)
{
temp = PARAM[Math.abs((ran.nextInt()) % 62)];
}
sb.append(temp).append("");
}
return sb.toString();
}
/**
* JSON非法字符处理
* @author z00194399
*
* filter sensitive data to prevent cross-site scripting
*/
public static String xssfilterForJson(String value)
{
if (null == value)
{
return null;
}
StringBuffer result = new StringBuffer(value.length());
for (int i = 0; i < value.length(); ++i)
{
switch (value.charAt(i))
{
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '\'':
result.append("'");
break;
case '%':
result.append("%");
break;
case ';':
result.append(";");
break;
case '(':
result.append("(");
break;
case ')':
result.append(")");
break;
case '&':
result.append("&");
break;
case '+':
result.append("+");
break;
default:
result.append(value.charAt(i));
break;
}
}
return result.toString().replaceAll("\\\\\"", """);
}
/**
* 跨站脚本非法字符处理
* @author z00194399
*
* filter sensitive data to prevent cross-site scripting
*/
public static String xssfilter(String value)
{
if (null == value)
{
return null;
}
StringBuffer result = new StringBuffer(value.length());
for (int i = 0; i < value.length(); ++i)
{
switch (value.charAt(i))
{
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '"':
result.append(""");
break;
case '\'':
result.append("'");
break;
case '%':
result.append("%");
break;
case ';':
result.append(";");
break;
case '(':
result.append("(");
break;
case ')':
result.append(")");
break;
case '&':
result.append("&");
break;
case '+':
result.append("+");
break;
default:
result.append(value.charAt(i));
break;
}
}
return result.toString();
}
/**
* 校验输入\输出字符合法性
* @param inputStr
* @return
*/
public static String validateChar(String regStr, String inputStr)
{
String result = null;
if (Utils.isNull(inputStr))
{
return inputStr;
}
if (isNull(regStr))
{
regStr = SystemConstant.DEFAULT_CHAR;
}
Pattern pattern = Pattern.compile(regStr, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.find())
{
result = matcher.group();
}
else
{
result = "invalid chars";
}
return result;
}
/**
* 用UUID生成一个唯一token
* @return
*/
public static synchronized String generateToken()
{
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
/**
* 判断是否存在非法csrf
* @param request
* @return
*/
public static boolean validateCSRF(HttpServletRequest request)
{
boolean ret = false;
String sToken = (String)request.getSession().getAttribute(SystemConstant.CSRFTOKEN);
String rToken = request.getParameter("csrf_token");
if (null != sToken && null != rToken && sToken.equals(rToken))
{
ret = true;
}
// token不管使用通过与否,被验证过都注销更新
String csrfToken = "csrf-" + SRCportalUtils.generateToken();
request.getSession().removeAttribute(SystemConstant.CSRFTOKEN);
request.getSession().setAttribute(SystemConstant.CSRFTOKEN, csrfToken);
return ret;
}
/**
* 校验请求是否可能来自跨站referer
* @param referer
* @return
*/
public static boolean identifyReferer(String referer)
{
String credit = ConfigHelper.getString("srcmsreferer");
// 如果不配置,认为不校验referer,返回true
if (isNull(credit))
{
return true;
}
String domain = getHost(referer);
if (null == domain)
{
logger.error("Get host from referer failed.");
}
else
{
List<String> list = Arrays.asList(credit.split(";"));
if (list.contains(domain))
{
return true;
}
}
return false;
}
/**
* 获取主机
*
* @param referrer
* @return
*
*/
private static String getHost(final String referer)
{
if (null == referer)
{
return null;
}
int position = referer.indexOf("://");
if (position == -1)
{
return null;
}
int startPos = position + 3;
int paramStartPos = referer.indexOf('?');
String hostAndPath = (paramStartPos == -1 ? referer : referer.substring(0, paramStartPos));
int endPos = hostAndPath.indexOf('/', startPos);
String hostPart = (endPos == -1 ? hostAndPath.substring(startPos) : hostAndPath.substring(startPos, endPos));
String host = null;
int hostNameEndPos = hostPart.lastIndexOf(':');
if (hostNameEndPos == -1)
{
host = hostPart;
}
else
{
host = hostPart.substring(0, hostNameEndPos);
}
return host;
}
/**
* 加固密码复杂度,至少8个字符,英文、数字、其它字符各至少出现一次
* @param pwd
* @return
*/
public static boolean checkPassword(String pwd)
{
if (pwd.length() < 8)
{
return false;
}
else
{
int passPower = 0;
Pattern pattern1 = Pattern.compile("(?=.*[^0-9A-Za-z]).{8,}");
Matcher m1 = pattern1.matcher(pwd);
if (m1.matches())
passPower++;
Pattern pattern2 = Pattern.compile("(?=.*\\d).{8,}");
Matcher m2 = pattern2.matcher(pwd);
if (m2.matches())
passPower++;
Pattern pattern3 = Pattern.compile("(?=.*[A-Za-z]).{8,}");
Matcher m3 = pattern3.matcher(pwd);
if (m3.matches())
passPower++;
if (passPower < 3)
{
return false;
}
}
return true;
}
/**
* 生成唯一的ID
* @param type reserved
* @return ID
*/
public static synchronized String getUUID(String type)
{
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
UUID uuid = UUID.randomUUID();
StringBuffer sb = new StringBuffer();
sb.append(type);
sb.append(format.format(new Date()));
String uid = uuid.toString().replace("-", "").substring(0, 6).toUpperCase(Locale.US);
sb.append(uid);
return sb.toString();
}
/**
* 获取通用文件字节大小
* 默认最大10M
*
* @return
*
*/
public static long getCommonFileByteSize()
{
long maxsize = ConfigHelper.getLong("commons.multipart.maxSize", 10485760l);
return maxsize;
}
/**
* 判断上传的文件类型是否支持
*
* @param fileName
* @param supportTypes
* @return
*
*/
public static boolean isUploadFileTypeSupport(String fileName, String[] supportTypes)
{
for (String fileType : supportTypes)
{
if (fileName.endsWith(fileType))
{
return true;
}
}
return false;
}
/**
* 获取请求的URI
*
* @param request
* @return
*
*/
public static String getRequestUri(HttpServletRequest request)
{
String uri = request.getServletPath();
String pathInfo = request.getPathInfo();
if (pathInfo != null)
{
uri = uri + pathInfo;
}
return uri;
}
/**
* 获取请求IP地址
*
* @param req
* @return
*
*/
public static String getRequestIP(ServletRequest req)
{
HttpServletRequest request = null;
if (req instanceof HttpServletRequest)
{
request = (HttpServletRequest)req;
}
if (null == request)
{
logger.error("HttpServletRequest is null.");
return null;
}
String requestIP = request.getHeader("x-forwarded-for");
if (requestIP == null || requestIP.length() == 0 || "unknown".equalsIgnoreCase(requestIP))
{
requestIP = request.getHeader("Proxy-Client-IP");
}
if (requestIP == null || requestIP.length() == 0 || "unknown".equalsIgnoreCase(requestIP))
{
requestIP = request.getHeader("WL-Proxy-Client-IP");
}
if (requestIP == null || requestIP.length() == 0 || "unknown".equalsIgnoreCase(requestIP))
{
requestIP = request.getRemoteAddr();
}
return requestIP;
}
/**
* 获取请求body
*
* @param req
* @return
* @throws TQSException
*
*/
public static String getRequestBody(ServletRequest req) throws SRCportalException
{
String requestBody = null;
ByteArrayOutputStream ostream = null;
try
{
// 获得消息体
byte[] buffer = new byte[1024];
InputStream istream = req.getInputStream();
ostream = new ByteArrayOutputStream();
int byteread = istream.read(buffer);
while (byteread != -1)
{
ostream.write(buffer, 0, byteread);
byteread = istream.read(buffer);
}
requestBody = new String(ostream.toString("UTF-8"));
}
catch (IOException e)
{
throw new SRCportalException("Read request stream data failed.", e);
}
finally
{
IOUtils.closeQuietly(ostream);
}
return requestBody;
}
}