📄 s3outils.java
字号:
package net.s3o.common;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.s3o.client.cache.ClientCacheManager;
import net.s3o.core.cache.S3OCookie;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.PathMatcher;
public class S3OUtils {
public static int MINLENGTH_OF_SALT=16;
public static Map createNewMap(){
Map newMap=null;
try {
newMap=(Map)(S3OConstant.DEFAULT_MAP.newInstance());
} catch (Exception e) {
newMap=null;
}
return newMap;
}
public static UserInfoWrapper createUserInfo(String userId,String password, HttpServletRequest request){
UserInfoWrapper userInfo=new UserInfoWrapper();
userInfo.setPrincipal(userId);
userInfo.setCredentials(password);
userInfo.setUserIp(request.getRemoteAddr());
userInfo.setUserSessionId(request.getSession(true).getId());
return userInfo;
}
/* ============================ */
public static boolean hasLogin(HttpServletRequest request){
UserInfoWrapper userInfo=getUserInfo(request);
if (userInfo==null) return false;
return !ClientCacheManager.hasLogout((String)userInfo.getPrincipal())&&!S3OUtils.isEmpty(userInfo.getPrincipal()) && !S3OUtils.isEmpty(userInfo.getCredentials());
}
public static UserInfoWrapper getUserInfo(HttpServletRequest request){
return (UserInfoWrapper)request.getSession(true).getAttribute(S3OConstant.KEY_OF_SESSION_USERINFO);
}
public static UserInfoWrapper getUserInfoFromSession(HttpSession session){
return (UserInfoWrapper)session.getAttribute(S3OConstant.KEY_OF_SESSION_USERINFO);
}
public static String getUserIdFromSession(HttpSession session){
UserInfoWrapper userInfo=getUserInfoFromSession(session);
return userInfo==null?null:(String)userInfo.getPrincipal();
}
public static String getUserPasswordFromSession(HttpSession session){
UserInfoWrapper userInfo=getUserInfoFromSession(session);
return userInfo==null?null:(String)userInfo.getCredentials();
}
public static String getUserIDFromSession(HttpSession session){
UserInfoWrapper userInfo=getUserInfoFromSession(session);
String userID=userInfo==null?null:(String)userInfo.getPrincipal();
return userID;
}
public static void setTicketToCookie(HttpServletResponse response,String ticket){
response.addCookie(new S3OCookie(S3OConstant.KEY_OF_TICKET_COOKEI,ticket));
}
public static String getUserTicketFromCookie(HttpServletRequest request){
Cookie ticketCookie = null;
Cookie[] cookies = request.getCookies();
String ticket=null;
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
ticketCookie = cookies[i];
if (ticketCookie.getName().equals(S3OConstant.KEY_OF_TICKET_COOKEI)) {
ticket= ticketCookie.getValue();
break;
}
}
}
ticket=S3OUtils.isEmpty(ticket)?S3OConstant.TICKET_INVALID:ticket;
return ticket;
}
/* ============================ */
public static String generateTicket(String username,String password,String userIP,String salt){
StringBuffer ticket=new StringBuffer(S3OConstant.TICKET_PREFIX);
if (userIP==null) userIP="";
String nameSalt=new String(Hex.encodeHex(username.substring(0, 2).getBytes())).toUpperCase();
int sPos=(int)(Math.random()*100) % MINLENGTH_OF_SALT;
if (salt==null || salt.length()<MINLENGTH_OF_SALT) {
salt=new String(Hex.encodeHex( (username+Base64.encodeBase64((salt+password).getBytes())+salt).getBytes()) ).toUpperCase();;
}
String salt1 = salt.substring(sPos,sPos+sPos);
String salt2 = salt.substring(sPos+sPos,MINLENGTH_OF_SALT+sPos);
ticket.append( salt1 ) ;
ticket.append( nameSalt ) ;
ticket.append( salt2 ) ;
ticket.append( generateRandomString() ) ;
return ticket.toString();
}
public static String generateRandomString(){
String rand=String.valueOf(Math.random());
rand=rand.replace(".",""+rand.charAt(rand.length()-1) );
int length=(int)(Math.random()*10);
length=length<5?5:length;
return String.valueOf((new Random().nextInt(255)+rand)).substring(0, length);
}
public static boolean isEmpty(Object str){
return str==null || ((String)str).length()<1;
}
public static boolean isEquals(Object a,Object b){
if (a==b) return true;
return a==null?b.equals(a):a.equals(b);
}
public static String removeParameterFromURL(String url,String paraName){
int start=url.indexOf("?");
if (start==-1 || start==url.length()-1 || url.indexOf(paraName+"=")==-1){
return url;
}
// int end=url.indexOf("?",start+1);
// if (end==-1) {
// end=url.length();
// }
String query="&"+url.substring(start+1)+"&"; // 无"?"
String regEx="&"+paraName+"=[^&]*";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(query);
query=m.replaceAll("");
regEx="^&+|&+$";
p=Pattern.compile(regEx);
m=p.matcher(query);
query=m.replaceAll("");
if (query.trim().length()>0){
query="?"+query;
}
return url.substring(0,start)+query;
}
public static void sendRedirect(HttpServletRequest request,HttpServletResponse response, String url) throws IOException {
if (!url.startsWith("http://") && !url.startsWith("https://")) {
url = request.getContextPath() + url;
}
// 用刷新的方式,可以显示一些信息,但这似乎是没有必要的
// response.setHeader("Refresh", "0; URL="+targetURL.toString());
// response.setContentType("text/html");
// PrintWriter out;
// out = response.getWriter();
// out.println("waiting...");
// out.flush();
// out.close();
response.sendRedirect(response.encodeRedirectURL(url));
}
public static boolean returnClientURLWithTicketKey(HttpServletRequest request,HttpServletResponse response,String ticketKey){
String clientURL=request.getParameter(S3OConstant.FIELD_TARGET_URL);
if (S3OUtils.isEmpty(clientURL)) return false;
String queryString=null;
clientURL=S3OUtils.removeParameterFromURL(clientURL, S3OConstant.FIELD_TICKETKEY);
if (!isEmpty(ticketKey)) {
S3OLog.dealMessage("returnClientURLWithTicketKey","ticketKey : "+ticketKey);
queryString=S3OConstant.FIELD_TICKETKEY+"="+ticketKey;
}
try {
gotoTargetURL(request,response,clientURL,queryString);
return true;
} catch (Exception e) {
}
return false;
}
public static void gotoTargetURL(HttpServletRequest request,HttpServletResponse response,String url,String para) throws IOException{
StringBuffer targetURL=new StringBuffer(url);
if (!S3OUtils.isEmpty(para)){
int sPos=targetURL.indexOf("?");
if (sPos==-1){
targetURL.append("?");
}else if(sPos!=targetURL.length()-1){
targetURL.append("&");
}
targetURL.append(para);
}
S3OUtils.sendRedirect(request, response,targetURL.toString());
}
public static String getFullURL(HttpServletRequest request,String path){
boolean includePort = true;
String scheme=request.getScheme().toLowerCase();
StringBuffer fullURL=new StringBuffer(scheme);
int serverPort=request.getServerPort();
if ("http".equals(scheme) && (serverPort == 80)) {
includePort = false;
}else if ("https".equals(scheme) && (serverPort == 443)) {
includePort = false;
}
fullURL.append("://").append(request.getServerName()).append((includePort) ? (":" + serverPort) : "");
fullURL.append(request.getContextPath()).append(path);
return fullURL.toString();
}
public static String getQueryString(HttpServletRequest request){
String queryStr=request.getQueryString();
if (isEmpty(queryStr)){
queryStr="";
}else{
queryStr="?"+queryStr;
}
return queryStr;
}
public static String getFullRequestURI(HttpServletRequest request){
String tagetURI=request.getRequestURI();
tagetURI=tagetURI.substring(request.getContextPath().length())+getQueryString(request);
return tagetURI;
}
public static String getFullRequestURL(HttpServletRequest request){
String tagetURLQuery=request.getQueryString();
if (tagetURLQuery==null){
tagetURLQuery="";
}
StringBuffer tagetURL=request.getRequestURL();
if ( !isEmpty(tagetURLQuery)){
tagetURL.append("?").append(tagetURLQuery);
}
return tagetURL.toString();
}
public static String getQueryStringFromMap(Map map){
StringBuffer rstr=new StringBuffer();
Iterator it=map.keySet().iterator();
while(it.hasNext()){
String key=(String)it.next();
rstr.append(key).append("=").append(map.get(key)).append("&");
}
rstr.substring(0,rstr.length()-1);
return rstr.toString();
}
public static String generateTicketKey(String ticket){
StringBuffer ticketKey=new StringBuffer(S3OConstant.TICKET_PREFIX);
String nameSalt=new String(Hex.encodeHex(ticket.substring(0, 2).getBytes())).toUpperCase();
int sPos=(int)(Math.random()*100) % MINLENGTH_OF_SALT;
// Base64.encodeBase64((S3OConstant.TICKET_PREFIX+generateRandomString()).getBytes());
String salt=new String(Hex.encodeHex(Base64.encodeBase64((generateRandomString()+S3OConstant.TICKET_PREFIX+Math.random()).getBytes()) )).toUpperCase();
if (salt.length()<MINLENGTH_OF_SALT) {
salt=salt+Math.random();
}
String salt1 = salt.substring(sPos,sPos+sPos);
String salt2 = salt.substring(sPos+sPos,MINLENGTH_OF_SALT+sPos);
ticketKey.append( salt1 ) ;
ticketKey.append( nameSalt ) ;
ticketKey.append( salt2 ) ;
ticketKey.append( generateRandomString() ) ;
return ticketKey.toString();
}
public static void main(String[] args) {
System.out.println(removeParameterFromURL("asdasd","www"));
System.out.println(generateTicket("liuqk","liuqk","127.0.0.1","CAA896FEB2DFC83F03ED8A9264CA851B"));
System.out.println(generateTicket("liuqk","liuqk","127.0.0.1","CAA896FEB2DFC83F03ED8A9264CA851B"));
System.out.println(generateTicket("asdas","bnmbnm","127.0.0.1",""));
boolean isPass=false;
String passURLPattern="/**/*.jpg;/**/*.gif;/**/*.css;/**/*.js";
String rurl="/asd/ddd/d.d.js";
PathMatcher pathMatcher = new AntPathMatcher();
String[] passURLs=passURLPattern.split(";");
for (int i=0;i<passURLs.length;i++){
isPass=pathMatcher.match(passURLs[i], rurl);
if (isPass){
break;
}
}
System.out.println(isPass);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -