ソースを参照

如果https没有使用默认端口443,需要加上端口号
如果https没有使用默认端口443,需要加上端口号

大罗马的太阳 6 年 前
コミット
05c6a12b7f
1 ファイル変更30 行追加20 行削除
  1. 30 20
      src/main/java/com/jfinal/render/RedirectRender.java

+ 30 - 20
src/main/java/com/jfinal/render/RedirectRender.java

@@ -67,25 +67,35 @@ public class RedirectRender extends Render {
 		return result;
 	}
 	
-	public void render() {
-		String finalUrl = buildFinalUrl();
-		
-		// 支持 https 协议下的重定向
-		if (!finalUrl.startsWith("http")) {	// 跳过 http/https 已指定过协议类型的 url
-			if (request.getScheme().equals("https")) {
-				if (finalUrl.charAt(0) != '/') {
-					finalUrl = "https://" + request.getServerName() + "/" + finalUrl;
-				} else {
-					finalUrl = "https://" + request.getServerName() + finalUrl;
-				}
-			}
-		}
-		
-		try {
-			response.sendRedirect(finalUrl);	// always 302
-		} catch (IOException e) {
-			throw new RenderException(e);
-		}
-	}
+    @Override
+    public void render() {
+        String finalUrl = buildFinalUrl();
+
+
+        // 支持 https 协议下的重定向
+        // 跳过 http/https 已指定过协议类型的 url
+        if (!finalUrl.startsWith("http")) {
+            String serverName = request.getServerName();
+            int serverPort = request.getServerPort();
+            String scheme = request.getScheme();
+
+            if ("https".equals(scheme)) {
+                //如果https没有使用默认端口443,需要加上端口号
+                String serverPath = serverPort == 443 ? serverName : serverName + ":" + serverPort;
+                if (finalUrl.charAt(0) != '/') {
+                    finalUrl = "https://" + serverPath + "/" + finalUrl;
+                } else {
+                    finalUrl = "https://" + serverPath + finalUrl;
+                }
+            }
+        }
+
+        try {
+            // always 302
+            response.sendRedirect(finalUrl);
+        } catch (IOException e) {
+            throw new RenderException(e);
+        }
+    }
 }