⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3outils.java

📁 单点登陆
💻 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 + -