0

基本问题是我们是否需要以 ROOT.war 的身份运行我们的战争,才能通过 Spring Security 获得正确的上下文路径?

背景:

我们有一个使用 spring 安全插件的 grails 应用程序。它由 nginx 代理,并且战争没有在 tomcat 中作为 ROOT.war 运行。

Web site: https://www.example.com
Login: https://www.example.com/login

战争名称是 foo.war 并且 nginx 正在代理请求到http://tomcat:8080/foo

Spring 安全性正在使用:${request.contextPath}

我们是否将应用程序安装为 ROOT.war,或者我们可以修改 grails spring security 中的上下文路径变量?

在路径中使用 /foo 设置了 spring security auth cookies ...并且我们的会话管理无法正常工作。

4

1 回答 1

1

@Ian-Roberts 是正确的。

你不能只使用grails.app.context = '/foo'or grails.app.context = '/'。我似乎 Tomcat 搞乱了应用程序上下文,所以你必须将它作为 ROOT.war 运行。

指示:

  • 您确实需要grails.app.context = '/'在 Config.groovy 中才能执行 grails run-app
  • 圣杯战争 ROOT.war
  • 将您的战争文件复制到您的 tomcat webapps 文件夹中的 ROOT.war 中。
  • 创建一个 ROOT.xml 文件

$TOMCAT_CONF/Catalina/localhost 中的 ROOT.xml

<Context path="" antiResourceLocking="false" privileged="true" >
                  <Resource name="jdbc/****x" 
              auth="Container" 
              type="javax.sql.DataSource"
              maxActive="300" 
             edited :)
              />
           <Resource name="jdbc/***" 
              auth="Container" 
             edited :)
            />
</Context>

因为我收到了 URL 映射错误。哦,不要试图在 AppBase 之外进行战争,因为 tomcat 不会扩展它,所有的地狱都会爆发:)

于 2012-10-03T23:05:36.227 回答