Tomcat配置虚拟主机后的登录验证码问题

  先描述一下问题现象,在本地测试运行一个java web网站,一切正常。但把网站部署到Linux服务器上后,发现登录出了问题,提示验证码输入不正确。登录时需要输入验证码,而验证码的原值是先存入session中的,然后点击【登录】后,会对比用户输入的验证码与原值,可此时查看日志发现,从session获取验证码为null。

  起先本人惯性地认为是代码的问题,可换了几种写法之后,仍然存在这种现象,仔细想了下服务器与本地环境的差异,锁定了一个点,服务器的域名跟本地是不同的,服务器上的tomcat设置了虚拟主机,并使用nginx做了域名的反向代理。这里假设项目为siteExample,那么在本地运行时,url为“hettp://localhost:8080/siteExample”,在Linux服务器上,为了构造友好的网址,变为了“http://www.example.com”。

  服务器上,指定了/www/apps为tomcat的项目发布目录。而在tomcat的server.xml文件中,关于虚拟主机的配置如下:

<Host appBase="/www/apps" autoDeploy="true" name="www.example.com" unpackWARs="true">
    <Context docBase="/www/apps/siteExample" path="" />
</Host>

  上面的配置中,Context元素的path属性之所以设为“”,是为了去除url中的项目名称,这样url就可以写为“http://www.example.com:8080”,然后再利用nginx的反向代理,去除url中的端口号即可。

  考虑到域名的差异,我又仔细地查看了登录发送的请求,找了原因。在jsp页面里,我们写的资源包括链接的地址都应该是相对于当前url的地址,可前端人员在登录时发送的请求url写死了,写成了“/siteExample/login.do”,很显然在服务器上运行时,请求的绝对url为“http://www.example.com/siteExample/login.do”,而最终正确的url应该为“http://www.example.com/login.do”。验证码的原值存在了“http://www.example.com”的会话session中,而登录请求时,获取到的会话session是“http://www.example.com/siteExample”的,自然获取不到验证码的原值了。

  可以看出,两个不同的域名,指向了相同物理位置的web项目,但产生的是两个不同的session会话。有兴趣的话可以研究下tomcat的运行原理。

时间: 2024-08-07 00:17:36

Tomcat配置虚拟主机后的登录验证码问题的相关文章

tomcat配置虚拟主机

在眼下,非常多server都是一台server对外能够訪问非常多个javaEE的项目,这样的实现方式就须要在tomcat里面配置虚拟主机了!以下就说说怎样配置虚拟主机: 找到tomcat的安装文件夹,到TOMCAT_HOME/apache-tomcat7/conf文件夹下,找到server.xml这个文件,打开该文件,在该文件里找到关于Engine这个子节点 <Engine name="Catalina" defaultHost="localhost">

Apache配置虚拟主机后,不能访问localhost的问题

今天想试用一下php7,但是发现php7只支持Apache2.4版本,而我电脑上的Apache是2.2版本,为了想尝鲜,就必须去下载新的Apache2.4 php7和apache2.4安装整合以后,localhost可以正常访问,没问题. 然后我又配置了几个虚拟主机,这时候,虚拟主机可以正常访问,但是localhost就访问不了了. 其实以前这种问题我也经历过,比如我之前用的php5.4搭配Apache2.2,就可以虚拟主机和localhost都可以访问: 但是我之前怎么解决的我也不记得了,今天

Linux配置虚拟主机后,只能访问到主页怎么办?

今天配置了lamp后,添加了一个虚拟主机,配置http.conf后,增加虚拟主机,测试访问发现只有域名下能访问,ljt.com但是域名下所有的都访问不到. Httpd-vhost..conf <VirtualHost *:80> DocumentRoot "/usr/local/apache/htdocs/cyds" ServerName cyds.ljt.com Errorlog logs/cyds.ljt.com.err CustomLog logs/cyds.ljt.

win10 apache配置虚拟主机后localhost无法使用

win10系统配置虚拟主机1.用记事本或Sublime Text打开httpd.confctrl + f 搜索httpd-vhosts.conf 将#Include conf/extra/httpd-vhosts.conf的#号去掉保存 2.打开extra/httpd-vhosts.conf添加如下内容:<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "E:/your_web_root" Serve

phpStudy配置虚拟主机后,无法正常访问指定目录。

报错如下: 查看你的hosts文件,是否定义过这个站点,或,是否有错别字. 如果报错是下面这个的话,很明显,站点没有正确的指定到具体的文件(文件夹).

Tomcat配置虚拟目录和虚拟主机

Tomcat配置虚拟目录 1.官方文档修改server.xml 不推荐. 在tomcat\conf下server.xml中找到: <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"&g

Nginx演练(1)配置虚拟主机

Nginx是一款比较流行Web服务器,和Apache,Lighttpd,IIS属于同类产品.对比而言,Nginx从性能和内存占用方面,都非常优秀,具体对比细节自行百度. 三大WEB服务器对比分析(apache ,lighttpd,nginx) 本文演练的主要内容是: 使用Nginx,实现基于IP的虚拟主机 使用Nginx,实现基于域名的虚拟主机 tomcat配置虚拟主机 1.前提 什么是虚拟主机? 虚拟主机使用是特殊的软硬件技术,把一台运行在Internet上的服务器主机分成一台台"虚拟&quo

16.4 配置Tomcat监听80端口;16.5、16.6、16.7配置Tomcat的虚拟主机(上中下);16.8 Tomcat日志

扩展: 邱李的tomcat文档 https://www.linuser.com/forum.php?mod=forumdisplay&fid=37 JAR.WAR包区别 http://blog.csdn.net/lishehe/article/details/41607725 tomcat常见配置汇总 http://blog.sina.com.cn/s/blog_4ab26bdd0100gwpk.html resin安装 http://fangniuwa.blog.51cto.com/10209

Tomcat(2)配置Tomcat的虚拟主机 、日志

配置Tomcat的虚拟主机 一个web服务器下一个ip可以访问多个域名,那就可以配置多个网站 Tomcat的虚拟主机 1.编辑配置文件: vim /usr/local/tomcat/conf/server.xml 其中<Host>和</Host>之间的配置为虚拟主机配置部分,name定义域名, appBase定义应用的目录,Java的应用通常是一个war的压缩包,你只需要将war的压缩包放到appBase目录下面即可.unpackWARs="true",这个是把