我有一个现有的Spring Web应用程序,然后我启动了一个单独的Spring Roo应用程序,它基本上只是一个主应用程序可以使用的rest api,以及第三方开发人员。这个设置有两个问题:
几乎所有应用程序的工作都是通过AJAX从客户端完成的,所以其余的api运行良好,但有时主应用程序还需要从其余的api访问其中一些新服务,但是它们是单独的应用程序,因此这意味着在我自己的应用程序中使用resttemplate或rmi ..
将其余的api作为单独的应用程序也意味着将其部署到单独的子域。这对于分割http请求很好,但对于需要在身份验证后面的api的请求不太好,因为这意味着重定向到另一个域进行单点登录,这会导致ajax请求失败。
让这一切都分开感觉很干净,但它也开始变得烦人。我可以将这两个项目结合起来,所有问题都将得到解决。建议?
答案 0 :(得分:1)
我建议你只将两个项目合并在一起:
答案 1 :(得分:1)
根据评论中的要求,我提供了一个示例,说明如何使用Apache ProxyPass
和ProxyPassReverse
通过相同的子域服务器2个单独的Web应用程序。
我这样做的方法是使用标准HTTP代理,但也可以使用AJP连接器(我相信)。我认为这需要一个webapps在不同的tomcat下运行(由于server.xml
需要一个唯一的Host
条目 - 见下文,但我不是100%肯定这一点。)
将以下内容添加到Apache conf文件中(例如vhosts.conf或vhosts.d / servername.conf):
<VirtualHost *:80>
ServerName 127.0.0.1
ServerName externalName1
ProxyRequests Off
# AJP example
#ProxyPreserveHost On
#ProxyPass / ajp://localhost:8009/
#ProxyPassReverse / ajp://localhost:8009/
ProxyPass /ws http://internalName1:8080/webapp1/
ProxyPassReverse /ws http://internalName1:8080/webapp1/
ProxyPass / http://internalName2:8080/webapp2/
ProxyPassReverse / http://internalName2:8080/webapp2/
</VirtualHost>
由于ProxyPass条目的顺序决定了优先级,因此对/ws/*
的任何请求将始终转到第一台服务器。但是第一台服务器必须有一个/ws
控制器来响应这些请求 - 换句话说,/ws
不是应用程序的上下文路径,而是webapp的内部路径。 webapp2
可以包含包含/ws
的路径,但只会被忽略,因为所有请求都会转到webapp1
。
每个webapp都需要tomcat Host
文件中的server.xml
条目,如:
<Host name="externalName1" debug="0" appBase="webapps/webapp1" unpackWARs="true" autodeploy="true">
<Alias>serverName1AltName</Alias>
<Context path="" docBase="" debug="5" reloadable="true"/>
</Host>
我自己已经配置了很多年并从我们运行的几台服务器中提取了信息,所以如果有任何错误或错误我会道歉。