/**
*
*/
package org.howsun.util;
import java.util.Enumeration;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.howsun.util.security.Codings;
/**
* 说明:<br>
* Web层工具
* @author 张纪豪
* @version
* Build Time Feb 23, 2009
*/
public class Servlets {
/**
* 从Request对象中取出字符串
* @param request
* @param name
* @param defaultValue
* @return
*/
public static String getStringByRequestParameter(HttpServletRequest request, String name, String defaultValue){
if(request == null) return defaultValue;
String str = request.getParameter(name);
return str == null ? defaultValue : str.trim();
}
/**
* 从Request对象中取出布尔值
* @param request
* @param name
* @param defaultValue
* @return
*/
public static boolean getBooleanByRequestParameter(HttpServletRequest request, String name, boolean defaultValue){
if(request == null || request.getParameter(name) == null)
return defaultValue;
try {
return Boolean.parseBoolean(request.getParameter(name));
} catch (Exception e) {
return defaultValue;
}
}
/**
* 从Request对象中取出整数
* @param request
* @param name
* @param defaultValue
* @return
*/
public static Integer getIntByRequestParameter(HttpServletRequest request, String name, Integer defaultValue){
if(request == null) return defaultValue;
try {
return Integer.parseInt(request.getParameter(name));
} catch (Exception e) {
return defaultValue;
}
}
/**
* 编码URL
* @param request
* @return
*/
public static String enUrlByRequest(HttpServletRequest request){
StringBuffer url = new StringBuffer(request.getAttribute("javax.servlet.forward.servlet_path") == null ? request.getRequestURL() : (String)request.getAttribute("javax.servlet.forward.servlet_path"));
String parm = param(request);
if(Strings.hasLength(parm)){
url.append("?").append(parm);
}
return new String(Codings.base64Encode(url.toString().getBytes()));
}
/**
* base64编码
* @param url
* @return
*/
public static String enStringToBase64(String url){
return new String(Codings.base64Encode(url.getBytes()));
}
/**
* base64解码
* @param url
* @return
*/
public static String deBase64ToString(String url){
return deUrl(url);
}
/**
* 还原URL地址
* @param url
* @return
*/
public static String deUrl(String url){//这个是还原方法
if(url == null) return "";
try {
return new String(Codings.base64Decode(url));
} catch (Exception e) {
return "";
}
}
/**
* 获取URL上的参数
* @param request
* @return
*/
public static String param(HttpServletRequest request){
StringBuffer url = new StringBuffer("");
Enumeration<?> param = request.getParameterNames();//得到所有参数名
while(param.hasMoreElements()){
String pname = param.nextElement().toString();
url.append(pname).append("=").append(request.getParameter(pname)).append("&");
}
if(url.toString().endsWith("&")){
url.deleteCharAt(url.length()-1);
}
return url.toString();
}
/**
* 检查验证码
* @param scope //作用域
* @param validateCode //用户输入的验证码
* @return
*/
public static Boolean isValidateCode(Object scope, String validateCode){
if(scope instanceof HttpSession){
HttpSession session = (HttpSession) scope;
String code = (String)session.getAttribute("validateCode");
return code == null ? false : code.equals(validateCode);
}
if(scope instanceof HttpServletRequest){
HttpServletRequest request = (HttpServletRequest) scope;
return isValidateCode(request.getSession(),validateCode);
}
return false;
}
public static Cookie getCookie(HttpServletRequest request, String name){
Cookie cooikes[] = request.getCookies();
if(cooikes != null)
for(Cookie cookie : cooikes){
if(name.equals(cookie.getName())){
return cookie;
}
}
return null;
}
public static String getCookieValue(HttpServletRequest request, String name){
Cookie cookie = getCookie(request, name);
return cookie != null ? cookie.getValue() : null;
}
public static void setCookie(HttpServletResponse response, Cookie cookie){
response.addCookie(cookie);
}
/**
*
* @param response
* @param name
* @param value
* @param domain
* @param expiry 有效期(秒)
* @param uri
*/
public static void setCookieValue(HttpServletResponse response, String name, String value, String domain, Integer expiry, String uri){
Cookie cookie = new Cookie(name, value);
if(domain != null){
cookie.setDomain(domain);
}
if(expiry != null){
cookie.setMaxAge(expiry);
}
if(uri != null){
cookie.setPath(uri);
}
response.addCookie(cookie);
}
/**
* 防止站外连接
* @param request
* @return
*/
public static boolean validate(HttpServletRequest request){
String referer = "";
boolean referer_sign = true; //true 站内提交,验证通过 //false 站外提交,验证失败
Enumeration<?> headerValues = request.getHeaders("Referer");
while (headerValues.hasMoreElements())
referer = (String)headerValues.nextElement();
//判断是否存在请求页面
if(referer == null || referer.length() < 1 ){
return false;
}
//判断请求页面和getRequestURI是否相同
String servername_str = request.getServerName();
if(servername_str != null && servername_str.length() > 0){
int index = 0;
if(referer.startsWith("https://")){
index = 8;
}
else if (referer.startsWith("https//")){
index = 7;
}
if(referer.length() - index < servername_str.length()) //长度不够
referer_sign = false;
else{ //比较字符串(主机名称)是否相同
String referer_str = referer.substring(index,index + servername_str.length());
if(!servername_str.equalsIgnoreCase(referer_str))
referer_sign = false;
}
}
else
referer_sign = false;
return referer_sign;
}
}