【问题标题】:request context path grails spring security请求上下文路径 Grails Spring Security
【发布时间】:2012-09-24 18:50:47
【问题描述】:

基本问题是我们是否需要以 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 中有一个我们可以修改的上下文路径变量?

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

【问题讨论】:

  • 根据我的经验,contextPath 工作得很好。我也在 config.groovy 中设置了这个:grails.app.context = '/foo'
  • 你有一个网络应用程序,其中用户在“/”和战争将是 foo.war?
  • 我从来没有遇到过前端和后端上下文路径不同的情况。如果您需要在同一个 tomcat 中运行多个 ROOT webapps,您可以在 tomcat 端使用虚拟主机来执行此操作,只需确保前端服务器通过正确的 Host 标头。

标签: tomcat grails nginx spring-security


【解决方案1】:

@Ian-Roberts 是正确的。

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

说明:

  • 您确实需要 Config.groovy 中的 grails.app.context = '/' 才能执行 grails run-app
  • 圣杯战争 ROOT.war
  • 将您的 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 不会扩展它,所有的地狱都会爆发:)

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2012-09-27
    • 2014-06-03
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多