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

4 篇文章 0 订阅
2 篇文章 0 订阅

一、问题

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

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


二、解决

如果服务器配置的是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的问题记录


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值