/*
* @(#)MisUtils.java 1.00.000 2005-6-12
*
* Copyright 2005 Xian KaiWang Technology, Inc. All rights reserved.
* Xian KaiWang PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package sample.utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.InetAddress;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.BreakIterator;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
/**
*
*
* @author Zhou Weijun
*
* 2005-6-12 16:48:24
*/
public class MisUtils {
private static final char[] QUOTE_ENCODE = """.toCharArray();
private static final char[] AMP_ENCODE = "&".toCharArray();
private static final char[] LT_ENCODE = "<".toCharArray();
private static final char[] GT_ENCODE = ">".toCharArray();
private static MessageDigest digest = null;
/**
* @param string
*/
public static boolean validateString(String string) {
if ((string != null) && (!string.equals(""))) {
return true;
}
return false;
}
/**
*
* @param floatString
* @param minMaxFlag
* @return
*/
public static BigDecimal convertFloat(String floatString, int minMaxFlag) {
BigDecimal floatValue = null;
// Parse a string to float value
if (validateString(floatString)) {
try {
floatValue = new BigDecimal(Float.parseFloat(floatString));
} catch (NumberFormatException e) {
floatValue = null;
}
}
// If convert failed, then set a default value depend on flag
if (floatValue == null) {
if (minMaxFlag == MisConstants.MIN_FLAG) {
floatValue = new BigDecimal(-10000000.00f);
} else {
floatValue = new BigDecimal(10000000.00f);
}
}
return floatValue;
}
/**
*
* @param dateString
* @param startEndFlag
* @return
*/
public static Date convertDate(String dateString, int startEndFlag) {
Date date = null;
// Parse a string to date value
if (validateString(dateString)) {
DateFormat dateFormat = new SimpleDateFormat(MisConstants.DATE_PATTERN);
try {
date = dateFormat.parse(dateString);
} catch (ParseException e) {
date = null;
}
}
// If convert failed, then set a default date depend on flag
if (date == null) {
if (startEndFlag == MisConstants.MIN_FLAG) {
Calendar calendar = Calendar.getInstance();
calendar.set(1900, 0, 1, 0, 0, 0);
date = calendar.getTime();
} else {
date = new Date();
}
}
return date;
}
/**
*
* @param dateString
* @param startEndFlag
* @return
*/
public static Calendar convertCalendar(String dateString, int startEndFlag) {
Calendar calendar = null;
// Parse a string to date value
if (validateString(dateString)) {
DateFormat dateFormat = new SimpleDateFormat(MisConstants.DATE_PATTERN);
try {
Date date = dateFormat.parse(dateString);
calendar = Calendar.getInstance();
calendar.setTime(date);
} catch (ParseException e) {
calendar = null;
}
}
// If convert failed, then set a default date depend on flag
if (calendar == null) {
if (startEndFlag == MisConstants.MIN_FLAG) {
calendar = Calendar.getInstance();
calendar.set(1900, 0, 1, 0, 0, 0);
} else {
calendar = Calendar.getInstance();
calendar.setTime(new Date());
}
}
return calendar;
}
/*
* @param path
* @param request
* @return
*/
public static String retrieveAbsolutePath(String path, ServletContext servletContext, HttpServletRequest request) {
String realContextPath = servletContext.getRealPath(MisConstants.PATH_SEPARATOR);
String absolutePath = realContextPath + path;
// Format it
if (absolutePath != null) {
absolutePath = absolutePath.replace('/', '\\');
}
return absolutePath;
}
/**
*
* @param path
* @return
*/
public static String formatPath(String path) {
String formattedPath = path;
String fileSeparator = System.getProperty(MisConstants.FILE_SEPARATOR_NAME);
if (MisUtils.validateString(formattedPath)) {
if (!formattedPath.endsWith(fileSeparator)) {
formattedPath += fileSeparator;
}
}
return formattedPath;
}
/**
*
* @param fileName
* @param request
* @return
* @throws IOException
*/
public static String getUploadOutputFile(String fileName, ServletContext servletContext, HttpServletRequest request) throws IOException {
String filePath = MisConstants.BLANK_STRING;
String fileSeparator = System.getProperty(MisConstants.FILE_SEPARATOR_NAME);
// Check upload existed? If not, Create it
String realPath = servletContext.getRealPath(MisConstants.PATH_SEPARATOR);
String uploadPath = formatPath(realPath);
if (!uploadPath.endsWith(fileSeparator)) {
uploadPath += fileSeparator;
}
uploadPath += MisConstants.UPLOAD_FOLDER;
File uploadFolderFile = new File(uploadPath);
if (!uploadFolderFile.exists()) {
uploadFolderFile.mkdir();
}
// Generate file name
int ipAddress = 0;
String remoteHost = request.getRemoteHost();
InetAddress inetAddress = InetAddress.getByName(remoteHost);
if (inetAddress != null) {
byte[] byteAddress = inetAddress.getAddress();
for (int i=0; i<4; i++) {
ipAddress = ( ipAddress << 8 ) - Byte.MIN_VALUE + (int) byteAddress[i];
}
}
if (ipAddress < 0) {
ipAddress = Math.abs(ipAddress);
}
long currentTime = new Date().getTime();
// Get file path
uploadPath = formatPath(uploadPath);
filePath = uploadPath + ipAddress + currentTime;
File folder = new File(filePath);
if (!folder.exists()) {
folder.mkdir();
}
// Make upload file full path
filePath = formatPath(filePath);
filePath += fileName;
return filePath;
}
/**
* @param fileName
*/
public static void deleteUploadFile(String fileName) throws Exception {
if (MisUtils.validateString(fileName)) {
try {
File file = new File(fileName);
if (file.exists()) {
file.delete();
}
} catch (Exception e) {
throw new Exception(e.getMessage());
}
}
}
/*
* @param string
* @param i
* @param j
* @param request
*/
public static void setDateField(String listName, int start, int end, int step, HttpServletRequest request) {
List listData = new ArrayList();
for (int i = start; i <= end; i += step) {
listData.add(new Integer(i));
}
request.setAttribute(listName, listData);
}
/**
* @param id
* @return
*/
public static boolean isValidId(String id) {
boolean result = false;
if (MisUtils.validateString(id)) {
if (id.length() == MisConstants.UUID_LENGTH) {
result = true;
}
}
return result;
}
/**
*
* @param string
* @return
*/
public static String getLikeString(String string) {
String likeString = "";
if (MisUtils.validateString(string)) {
likeString = "%" + string + "%";
}
return likeString;
}
/**
*
* @param values
* @return
*/
public static String Array2String(String[] values) {
String result = "";
if (values == null) {
return result;
}
int len = values.length;
for (int i = 0; i < len; i++) {
result += values[i] + ",";
acegi-2.rar
需积分: 0 142 浏览量
更新于2008-10-25
收藏 115KB RAR 举报
AceGI(Ace Guarder Identity)是一个历史悠久的Java安全框架,主要设计用于在Spring应用程序中实现精细的权限管理和认证。这个“acegi-2.rar”压缩包文件可能包含了AceGI的第二个版本,它提供了用于构建安全Web应用的核心组件和服务。在这个框架的帮助下,开发者能够轻松地集成用户身份验证、授权以及会话管理等功能,确保应用程序的安全性。
AceGI框架的关键知识点包括:
1. **身份验证(Authentication)**:AceGI提供了一套完整的机制来验证用户的身份。这包括支持多种认证策略,如基于数据库、LDAP目录服务或简单的用户名/密码文件。通过定义自定义认证 provider,开发者可以根据具体需求定制认证流程。
2. **授权(Authorization)**:框架允许开发者精细控制用户的访问权限,可以基于角色、URL、方法级别进行授权。它可以与Spring的AOP(面向切面编程)结合,创建灵活的访问控制规则。
3. **会话管理(Session Management)**:AceGI可以监控和管理用户会话,防止会话劫持和超时问题。它还支持会话固定保护,预防会话固定攻击。
4. **过滤器链(Filter Chain)**:AceGI的核心是安全过滤器链,它在HTTP请求进入应用之前进行拦截和处理。开发者可以自定义过滤器,添加到链中,以实现特定的安全策略。
5. **异常处理(Exception Handling)**:AceGI处理与安全相关的异常,如未授权(Unauthorized)或禁止(Forbidden)情况,并可以配置自定义的错误页面和处理逻辑。
6. **集成Spring**:由于AceGI是为Spring设计的,因此它可以无缝集成到Spring应用中,利用Spring的依赖注入和AOP能力,使得安全性配置更加灵活和可测试。
7. **国际化支持(Internationalization)**:AceGI支持多语言环境,可以方便地为不同地区的用户提供本地化的错误消息。
8. **日志和审计**:框架提供日志记录和审计功能,便于开发者追踪和分析安全事件,帮助定位潜在的安全漏洞。
9. **插件式架构**:AceGI的插件式设计使得扩展和定制变得简单,开发者可以轻松地增加新的功能或修改现有行为。
10. **安全配置**:所有安全设置都可通过XML配置文件进行,这使得安全策略可以独立于代码,便于维护和升级。
“acegi-2.rar”中的内容可能包含了AceGI框架的源码、文档、示例应用以及相关的配置文件。通过学习和使用AceGI,开发者能够构建出更安全、更健壮的企业级Java应用。然而,值得注意的是,AceGI后来已被Spring Security所取代,后者继承了AceGI的优点,并进行了许多改进和增强,成为现代Java应用中广泛使用的安全框架。因此,尽管AceGI是一个强大的工具,学习Spring Security可能对当前的开发更有价值。