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

通过浏览器输入https://www.xxx.com,request.getScheme()获取到的确实http而不是https
通过request.getRequestURL()拿到的也是http://www.xxx.com
分析原因,是因为用nginx+tomcat部署web服务,tomcat接受到的请求都是来自于nginx的http请求。
        request.getScheme()  //总是 http,而不是实际的http或https
        request.isSecure()  //总是false(因为总是http)
        request.getRemoteAddr()  //总是 nginx 请求的 IP,而不是用户的IP
        request.getRequestURL()  //总是 nginx 请求的URL 而不是用户实际请求的 URL
        response.sendRedirect( 相对url )  //总是重定向到 http 上 (因为认为当前是 http 请求)  

解决办法:  1、在nginx 配置location处加上proxy_set_header X-Forwarded-Scheme  $scheme;
    通过request.getHeader("X-Forwarded-Scheme")获取真实的scheme  2、在Tomcat server.xml中添加
<Engine name="Catalina" defaultHost="localhost">    这行之后
      <Valve className="org.apache.catalina.valves.RemoteIpValve"
        remoteIpHeader="X-Forwarded-For"
        protocolHeader="X-Forwarded-Proto"
        protocolHeaderHttpsValue="https"/>  

   3、如果jsp中大量使用 request.getScheme() 获取,避免更改代码

    则需要配置 tomcat

 <Connector port="443" maxHttpHeaderSize="8192"
                 maxThreads="150"
                 enableLookups="false" disableUploadTimeout="true"
                 acceptCount="100" scheme="https" secure="true"
                 SSLEnabled="true"
                 SSLCertificateFile="${catalina.base}/conf/localhost.crt"
                 SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />    如果nginx添加了ssl认证,tomcat不添加,则只需要配置蓝色部分就好
  红色部分,如果tomcat 需要添加ssl认证,则配置红色部分
时间: 2024-08-22 15:26:11

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

Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议

转自:http://feitianbenyue.iteye.com/blog/2056357 最近在做一个项目, 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https协议 但是,明明是https url请求,发现 log里面, Xml代码   0428 15:55:55 INFO  (PaymentInterceptor.java:44) preHandle() - requestStringForLog:    { "re

JSP userBean setProperty直接从request中获取参数

JSP userBean setProperty直接从request中获取参数: form表单Jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page isELIgnored="true"%> <% String path = request.getContextPath(); String

常用Request对象获取请求信息

Request.ServerVariables(“REMOTE_ADDR”) ‘获取访问IPRequest.ServerVariables(“LOCAL_ADDR”) ‘同上Request.ServerVariables(“SERVER_NAME”) ‘获取服务器IPRequest.ServerVariables(“HTTP_REFERER”) ‘获取访问来源页面Request.ServerVariables(“OS”) ‘获取操作系统request.ServerVariables(“APPL_

String basePath = request.getScheme()+&quot;://&quot;+request.getServerName()+&quot;:&quot;+request.getServerPort()+pat----------&lt;base&gt;元素有关

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+pat的解释: 这其实就是 获得应用的根url,比如说你的应用的根路径是 http://localhost:8080,那么你列出的代码就是为basePath赋值为 http://localhost:8080.具体点: 1.request.getScheme() 返回协议的名称

request.getScheme()的使用方法

http://bo-hai.iteye.com/blog/939255 今天在修改bug时,发现程序使用了 request.getScheme() .不明白是什么意思,在google 搜索了一下.现在明白了.整理如下: 1.request.getScheme() 返回当前链接使用的协议:比如,一般应用返回http;SSL返回https; 2.在程序中的应用如下: Java代码   String path = request.getContextPath(); String basePath = 

request常用获取信息的方法

servlet代码 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class

request 参数获取

package com.jie.request.servlet; import java.io.IOException; import java.io.InputStream; import java.security.Principal; import java.util.Collection; import java.util.Enumeration; import java.util.Locale; import java.util.Map; import java.util.Map.En

使用Ajax.BeginForm 中需要 上传文件 但 Request.files获取不到

使用Mvc里的插件jquery.unobtrusive-ajax.min.js 之前一直困在这里,一开始以为添加属性enctype="multipart/form-data"就可以 网上看到都是用另外一个插件jquery.form.js 于是,从某篇文章的附件中下载了jquery.form.js,弄了许久,还不行,顿时泪崩了, 最后在官网下载最新的jquery.form.js就解决了  ==|| 使用Ajax.BeginForm 中需要 上传文件 但 Request.files获取不到

MQTT mosquitto[1]---- 单向SSL认证的配置方式

我们知道,MQTT mosquitto支持单向和双向的SSL认证,首先咱们来看一下单项认证的配置文件应该如何配置.所谓的单向SSL证书,指的是,MQTT的客户端访问MQTT的服务器端的时候,如果用到了SSL加密通信,在建立SSL加密通信前,客户端需要通过证书来验证服务端是否是可信任的,所以客户端会把服务器端传过来的证书和自身的已经的在某种途径下得到的服务器端CA证书或者服务器证书进行比较,如果匹配成功,则运行建立可信任的安全的SSL连接. 我们知道启动MQTT mosquitto的时候,可以通过