package com.liam.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author liam.huang@foxmail.com
* 基础工具类
*/
public class BasicUtil {
/**
* 1.判断是否“不为空”
* @param ob
* @return
*/
public static boolean notEmpty(Object ob){
return null!=ob && !"".equals(ob) && !"null".equals(ob);
}
/**
* 2.判断是否“为空”
* @param ob
* @return
*/
public static boolean isEmpty(Object ob){
return null==ob || "".equals(ob) || "null".equals(ob);
}
/**
* 3.字符串转换为字符串数组
* @param str
* @param spiltRegex 分隔符
* @return
*/
public static String[] str2StrArray(String str, String spiltRegex){
if(isEmpty(str))
return null;
return str.split(spiltRegex);
}
/**
* 4.用默认的分隔符(,)将字符串转换为字符串数组
* @param str
* @return
*/
public static String[] str2StrArray(String str){
return str2StrArray(str, ",\\s*");
}
/**
* 5.按照参数format的格式,日期转字符串
* @param date
* @param format
* @return
*/
public static String date2Str(Date date, String format){
if(notEmpty(date)){
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}else{
return "";
}
}
/**
* 6.默认格式"yyyy-MM-dd HH:mm:ss",日期转字符串
* @param date
* @return
*/
public static String date2Str(Date date){
return date2Str(date, "yyyy-MM-dd HH:mm:ss");
}
public static Date str2Date(String date){
if(notEmpty(date)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return new Date();
}else{
return null;
}
}
}
package com.liam.util;
import org.apache.catalina.core.ApplicationContext;
/**
* @author liam.huang@foxmail.com
* 常量工具类
*/
public class Const {
public static final String SESSION_SECURITY_CODE = "sessionSecurityCode";
public static final String SESSION_USER = "sessionUser";
public static final String SESSION_USER_RIGHTS = "sessionUserRights";
public static final String SESSION_ROLE_RIGHTS = "sessionRoleRights";
//不对匹配该值的访问路径拦截(正则表达式)
public static final String NO_INTERCEPTOR_PATH = ".*/((login)|(logout)|(code)).*";
//该值会在web容器启动时由WebAppContextListener初始化
public static ApplicationContext WEB_APP_CONTEXT = null;
}
package com.liam.util;
import java.io.File;
/**
* @author liam.huang@foxmail.com
* 路径获取工具类
*/
public class PathUtil {
/**
* 1.根据路径和文件名,获取文件的路径
* @param userPath "/com/liam/simulator/xml/"
* @param filename "User.xml"
* @return
*/
public static String getSpecialPath(String userPath, String filename){
if(BasicUtil.notEmpty(filename))
return filter(PathUtil.class.getResource(userPath).toString()) + filename;
else
return filter(PathUtil.class.getResource(userPath).toString());
}
/**
* 2.在当前路径下,获取文件路径
* @return
*/
public static String getCurrentPath(String filename){
if(BasicUtil.notEmpty(filename))
return filter(PathUtil.class.getResource("").toString()) + filename;
else
return filter(PathUtil.class.getResource("").toString());
}
/**
* 3.在src根目录路径下,获取文件路径
* @return
*/
public static String getSrcRootPath(String filename){
if(BasicUtil.notEmpty(filename))
return filter(PathUtil.class.getClassLoader().getResource("").toString()) + filename;
else
return filter(PathUtil.class.getClassLoader().getResource("").toString());
}
/**
* 过滤器
* @param path
* @return
*/
public static String filter(String path){
if(path.startsWith("file"))
path = path.substring(6);
path.replace("/", File.separator);
return path;
}
}
package com.liam.util;
import java.lang.reflect.Field;
/**
* @author liam.huang@foxmail.com
* 反射工具类
*/
public class ReflectUtil {
/**
* 1.根据对象的filedName获取Field
* @param obj
* @param fieldName
* @return
*/
public static Field getFieldByFieldName(Object obj, String fieldName){
for(Class<?> superClass=obj.getClass(); superClass!=Object.class; superClass=superClass.getSuperclass()){
try {
return superClass.getDeclaredField(fieldName);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 2.根据对象的filedName获取属性值
* @param obj
* @param fieldName
* @return
*/
public static Object getValueByFieldName(Object obj, String fieldName){
Field field = getFieldByFieldName(obj, fieldName);
Object value = null;
try {
if(field!=null){
if(field.isAccessible()){
value = field.get(obj);
} else {
field.setAccessible(true);
value = field.get(obj);
field.setAccessible(false);
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return value;
}
/**
* 3.根据对象的filedName,设置属性值
* @param obj
* @param fieldName
* @param value
*/
public static void setValueByFieldName(Object obj, String fieldName, Object value){
try {
Field field = obj.getClass().getDeclaredField(fieldName);
if(field.isAccessible()){
field.set(obj, value);
} else {
field.setAccessible(true);
field.set(obj, value);
field.setAccessible(false);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
package com.liam.util;
import java.math.BigInteger;
/**
* @author liam.huang@foxmail.com
* 权限核查、计算工具类
*/
public class RightsUtil {
/**
* 1.验证是否具有指定编码的权限
* @param sum
* @param targetRights
* @return
*/
public static boolean verifyRights(BigInteger sum, int targetRights){
return sum.testBit(targetRights);
}
public static boolean verifyRights(String sum, int targetRights){
if(BasicUtil.isEmpty(sum))
return false;
return verifyRights(new BigInteger(sum), targetRights);
}
public static boolean verifyRights(BigInteger sum, String targetRights){
return verifyRights(sum,Integer.parseInt(targetRights));
}
public static boolean verifyRights(String sum, String targetRights){
if(BasicUtil.isEmpty(sum))
return false;
return verifyRights(new BigInteger(sum), Integer.parseInt(targetRights));
}
/**
* 2.利用BigInteger对权限进行2的权的“和计算”
* @param rights
* @return
*/
public static BigInteger sumRights(String[] rights){
BigInteger num = new BigInteger("0");
for(int i=0; i<rights.length; i++)
num = num.setBit(Integer.parseInt(rights[i]));
return num;
}
public static BigInteger sumRights(int[] rights){
BigInteger num = new BigInteger("0");
for(int i=0; i<rights.length; i++)
num = num.setBit(rights[i]);
return num;
}
}
package com.liam.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @author liam.huang@foxmail.com
* 验证码生成工具类
*/
public class VryCodeUtil {
public static String generate(HttpSession session, HttpServletResponse response){
ByteArrayOutputStream output = new ByteArrayOutputStream();
String vrfCode = drawImg(output);
ServletOutputStream out;
try {
out = response.getOutputStream();
output.writeTo(out);
} catch (IOException e) {
e.printStackTrace();
}
return vrfCode;
}
private static String drawImg(ByteArrayOutputStream output) {
String vrfCode = "";
for(int i=0; i<4; i++)
vrfCode += randomChar();
int width = 70;
int height = 25;
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
Font font = new Font("Times New Roman", Font.PLAIN, 20);
Graphics2D g2d = bi.createGraphics();
g2d.setFont(font);
Color color = new Color(66,2,82);
g2d.setColor(color);
g2d.setBackground(new Color(226,226,240));
g2d.clearRect(0, 0, width, height);
FontRenderContext context = g2d.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(vrfCode, context);
double x = (width - bounds.getWidth())/2;
double y = (height - bounds.getHeight())/2;
double ascent = bounds.getY();
double baseY = y - ascent;
g2d.drawString(vrfCode, (int)x, (int)baseY);
g2d.dispose();
try{
ImageIO.write(bi, "jpg", output);
}catch(IOException e){
e.printStackTrace();
}
return vrfCode;
}
private static char randomChar() {
Random r = new Random();
String s = "0123456789";
return s.charAt(r.nextInt(s.length()));
}
}