一、问题
服务器上已经进行过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;
}
}
感谢分享