记录一个关于request.getScheme()的问题

一、问题

    服务器上已经进行过SSL安全认证,tomcat没有任何认证,这时候他的Scheme是http,那么问题来了,

当把项目部署到服务器上的时候获取的Scheme还是http,这时不管用拦截器也好还是某个需求需要获取地址的时候,都是http。

记录一个关于request.getScheme()的问题_第1张图片

二、解决

如果服务器配置的是HTTPS的,有以下两种方式可解决只获取http的问题 

         1、在nginx配置location处加上proxy_set_header X-Forwarded-Scheme $scheme; 

                通过request.getHeader("X-Forwarded-Scheme")获取真实的scheme

 2、还可以在tomcat配置文件中Connector下面添加scheme="https" secure="true"

三、相关代码

package com.chni.common.util;

import javax.servlet.http.HttpServletRequest;

/**
 * 
 * ClassName: BeanUrl
 * 
 * @Description: 得到项目路径的工具类
 * @author caoyd
 * @date 2018年4月21日
 */
public class BeanUrl {

	/**
	 * 
	 * @Description: 得到项目的名字
	 * @param @param request
	 * @param @return
	 * @return
	 * @throws
	 * @author caoyd
	 * @date 2018年4月21日
	 */
	public static String getContextPath(HttpServletRequest request) {
		String path = "";
		try {
			path = request.getContextPath();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return path;
	}

	/**
	 * 
	 * @Description: 得到连接的scheme(http或HTTPS)
	 * @param @param request
	 * @param @return
	 * @return
	 * @throws
	 * @author caoyd
	 * @date 2018年4月21日
	 */
	public static String getScheme(HttpServletRequest request) {
		String scheme = "";
		try {
			scheme = request.getHeader("X-Forwarded-Scheme");
			if (scheme == null) {
				scheme = request.getScheme();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return scheme;
	}

	/**
	 * 
	 * @Description: 得到服务的名字(域名)
	 * @param @param request
	 * @param @return
	 * @return
	 * @throws
	 * @author caoyd
	 * @date 2018年4月21日
	 */
	public static String getServerName(HttpServletRequest request) {
		String servletName = "";
		try {
			servletName = request.getServerName();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return servletName;
	}

	/**
	 * 
	 * @Description: 获取端口号
	 * @param @param request
	 * @param @return
	 * @return
	 * @throws
	 * @author caoyd
	 * @date 2018年4月21日
	 */
	public static int getServerPort(HttpServletRequest request) {
		int servletPort = 80;
		try {
			servletPort = request.getServerPort();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return servletPort;
	}

	/**
	 * 
	 * @Description: 获取请求路径
	 * @param @param request
	 * @param @return   
	 * @return   
	 * @throws
	 * @author caoyd
	 * @date 2018年4月21日
	 */
	public static String getBeanPath(HttpServletRequest request) {
		String scheme = "";
		String servletName = "";
		int servletPort = 80;
		String path = "";
		try {
			scheme = request.getHeader("X-Forwarded-Scheme");
			if (scheme == null) {
				scheme = request.getScheme();
			}
			servletName = request.getServerName();
			servletPort = request.getServerPort();
			path = request.getContextPath();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return scheme + "://" + servletName + ":" + servletPort + path;
	}
}

感谢分享

SSL 认证之后,request.getScheme()获取不到https的问题记录


你可能感兴趣的:(java,笔记,https)