1 package com.blandware.atleap.webapp.util.core; 2 3 import com.blandware.atleap.common.Constants; 4 5 import javax.servlet.ServletContext ; 6 import javax.servlet.http.HttpServletRequest ; 7 import java.util.HashMap ; 8 import java.util.Map ; 9 10 11 19 public class SslUtil { 20 22 public static final String HTTP = "http"; 23 public static final String HTTPS = "https"; 24 public static final String HTTP_PORT_PARAM = "listenPort_http"; 25 public static final String HTTPS_PORT_PARAM = "listenPort_https"; 26 private static String HTTP_PORT = null; 27 private static String HTTPS_PORT = null; 28 public static final String STD_HTTP_PORT = "80"; 29 public static final String STD_HTTPS_PORT = "443"; 30 31 33 42 public static String getRedirectString(HttpServletRequest request, 43 ServletContext ctx, boolean isSecure) { 44 Map config = (HashMap ) ctx.getAttribute(Constants.CONFIG); 46 HTTP_PORT = (String ) config.get(Constants.HTTP_PORT); 47 HTTPS_PORT = (String ) config.get(Constants.HTTPS_PORT); 48 49 String desiredScheme = isSecure ? HTTPS : HTTP; 52 String usingScheme = request.getScheme(); 53 54 String desiredPort = isSecure ? HTTPS_PORT : HTTP_PORT; 57 String usingPort = String.valueOf(request.getServerPort()); 58 59 String urlString = null; 60 61 if ( !desiredScheme.equals(usingScheme) || 63 !desiredPort.equals(usingPort) ) { 64 urlString = 65 buildNewUrlString(request, desiredScheme, usingScheme, 66 desiredPort, usingPort); 67 68 RequestUtil.stowRequestAttributes(request); 70 } else { 71 RequestUtil.reclaimRequestAttributes(request); 73 } 74 75 return urlString; 76 } 77 78 89 private static String buildNewUrlString(HttpServletRequest request, 90 String desiredScheme, 91 String usingScheme, 92 String desiredPort, String usingPort) { 93 StringBuffer url = request.getRequestURL(); 94 95 url.replace(0, usingScheme.length(), desiredScheme); 96 97 int startIndex = url.toString().indexOf(usingPort); 99 100 if ( startIndex == -1 ) { 102 if ( (!(STD_HTTPS_PORT.equals(desiredPort) && 103 HTTPS.equals(desiredScheme))) && 104 (!(STD_HTTP_PORT.equals(desiredPort) && 105 HTTP.equals(desiredScheme))) ) { 106 startIndex = 107 url.toString().indexOf("/", 108 url.toString().indexOf("/", 109 url.toString() 110 .indexOf("/") + 111 1) + 1); 112 url.insert(startIndex, ":" + desiredPort); 113 } 114 } else { 116 if ( (STD_HTTPS_PORT.equals(desiredPort) && 117 HTTPS.equals(desiredScheme)) || 118 (STD_HTTP_PORT.equals(desiredPort) && 119 HTTP.equals(desiredScheme)) ) { 120 url.delete(startIndex - 1, startIndex + usingPort.length()); 121 } else { 123 url.replace(startIndex, startIndex + usingPort.length(), 125 desiredPort); 126 } 127 } 128 129 String queryString = request.getQueryString(); 131 132 if ( (queryString != null) && (queryString.length() != 0) ) { 133 url.append("?" + queryString); 134 } else { 135 queryString = RequestUtil.getRequestParameters(request); 136 137 if ( (queryString != null) && (queryString.length() != 0) ) { 138 url.append("?" + queryString); 139 } 140 } 141 142 return url.toString(); 143 } 144 } 145 | Popular Tags |