Jboss 一个域上的两个web应用具有不同的上下文根?

Jboss 一个域上的两个web应用具有不同的上下文根?,jboss,dns,seam,single-sign-on,Jboss,Dns,Seam,Single Sign On,我有个问题。我有两个部署为wars的web应用程序。让我们称它们为app1.war和app2.war 我希望app1.war可以通过URLwww.website.com访问,我希望app2.war可以通过www.website.com/anotherapp访问。我已经准备好域名了 虚拟主机在这里似乎没有帮助 我正在运行JBossAppServer5.1和Seam2.2.0。我正在将论坛(部署为war)与我的应用程序(部署为另一个war)集成,因此需要使用单点登录,因此希望上述URL格式能够轻松传

我有个问题。我有两个部署为wars的web应用程序。让我们称它们为
app1.war
app2.war

我希望
app1.war
可以通过URL
www.website.com
访问,我希望
app2.war
可以通过
www.website.com/anotherapp
访问。我已经准备好域名了

虚拟主机在这里似乎没有帮助

我正在运行JBossAppServer5.1和Seam2.2.0。我正在将论坛(部署为war)与我的应用程序(部署为另一个war)集成,因此需要使用单点登录,因此希望上述URL格式能够轻松传递sso cookies

谢谢你的见解


-Charles。

有一段时间没有使用JBoss了,或者根本没有使用Seam,但是如果它像大多数应用程序服务器一样,那么会有一个XML文件,其中有一些描述,您可以将URL模式与应用程序相匹配。查看文档了解详细信息,但我认为您需要web.xml和一些servlet条目,如:

<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.seam</url-pattern>
</servlet-mapping>

Facesservlet
*.接缝
相应地更改url模式和servlet

我希望app1.war可以通过以下url访问:www.website.com,我希望app2.war可以通过www.website.com/anotherapp访问。当然,我已经准备好了我的域名

实现特定用例的最简单方法是将app1.war部署到ROOT.war,将app2.war部署到/deploy目录中的另一个app.war。这在使用分解战争部署时效果最佳


如果不想重命名分解后的war文件夹,可以使用符号链接。

要在servlet容器中为所有web应用使用相同的会话cookie,请将SessionCookie添加到deploy/jbossweb.sar/context.xml:

<Context>
 ...
 <SessionCookie path="/" />
</Context>

...

如果您不想将ROOT.war重命名为其他名称,并让app1.war获得ROOT.war-name(我不理解为什么不),也许您可以执行一些apache重定向/重写/代理操作来隐藏app1的真实上下文根,您需要执行以下操作:

  • 将JBoss配置为使用具有www.website.com名称的虚拟主机

    您可以从
    jbossweb.sar
    目录编辑
    server.xml
    。简而言之,您必须设置另一个
    Host
    指令

  • 您必须设置war应用程序。您可以通过创建或编辑
    jboss web.xml
    文件(它应该放在
    web-INF
    目录中)来完成。在该文件中,您可以配置应该在什么上下文下使用什么虚拟主机

  • app1.war的文件示例

    <jboss-web>
       <context-root>/</context-root>
       <virtual-host>website</virtual-host>
    </jboss-web>
    
    
    /
    网站
    
    app2.war的文件示例

    <jboss-web>
       <context-root>/anotherapp</context-root>
       <virtual-host>website</virtual-host>
    </jboss-web>
    
    
    /另一个应用程序
    网站
    

    你可以在那篇文章中找到更多信息。嗯……这绝对不是我想要的。我知道servlet和url模式。也许我应该再试一次。我有两个seam web应用程序。每个应用程序都运行得很好。每个应用程序都由jsf页面、servlet等组成。这不是问题所在。我已经使用jboss虚拟主机机制将我的域名www.domain.com(我用“domain”替换了我的实际站点名)指向了app1.war。一切都很好。现在,app2.war是另一个通过域app2.domain.com提供服务的应用程序(jsp)(也使用jboss app server的本机虚拟主机)。现在,我在app1.war中有了身份验证机制,用户信息存储在数据库中。我想实现sso以自动将用户登录到app2.war(app2.domain.com)。然而,我想利用cookies的一个主要功能。为某个域(如www.domain.com)存储的cookie也可供该域下的每个资源请求访问。例如,www.domain.com/foo.html或www.domain.com/foo/bar.html可以访问相同的cookies。根据我当前对这两个应用程序的设置,第一个应用程序将在域www.domain.com下创建cookies,而第二个应用程序将在app2.domain.com下创建cookies。这对我来说是个问题,因为app1(www.domain.com)写入客户端浏览器的cookie将无法被app2(app2.domain.com)访问。现在我又回到问题上来了。是否有人知道将app2作为app1的子路径访问的优雅方法。因此,我想以www.domain.com的形式访问app1,以www.domain.com/app2的形式访问app2。显然,我可以将app2中的所有页面和代码集成到app1中(从而拥有一个应用程序),并从app1的web根目录下的目录(名为“app2”)访问app2的页面。这种方法对我来说太肮脏了。然而,如果我不能解决这个问题,我将不得不用肮脏的方式来解决。是的,我知道这个把戏。但是,我不想删除jboss主服务器的/deploy目录中现有的ROOT.war。这是因为ROOT.war是一个应用程序,其页面包含指向管理控制台、jmx控制台等的链接。让我们只说,我希望能够删除我的app1.war和app2.war,禁用虚拟主机,并使容器保持原样(新鲜jboss)。现在,我将admin.domain.com映射到我的ROOT.war。这不是问题所在。我只需要知道是否有人像我描述的那样为我的用例提供了解决方案。因为我不想不必要地修改我的jboss文件夹。我希望能够将应用程序部署到服务器,使用它,删除应用程序并恢复服务器的原始状态。此外,人们倾向于删除ROOT.war和/或将其应用程序重命名为ROOT.war,只是为了使该应用程序获得作为服务器上的根应用程序的权限(如果您已将域指向jboss服务器ip,则通常由localhost或www.website.com访问)。您只需使用虚拟主机即可。你带SessionOkie标签的答案似乎很有趣。我会测试一下,然后再报告。太棒了!这就是我需要的。我已经为这两个应用程序提供了jboss web文件,但我没有想到这两个应用程序都可以使用同一个v