賞金將在 2 天內到期。此問題的答案有資格獲得 50聲望賞金。 tylerwal希望引起對這個問題的更多關注。
我們正在將 Grails 4 應用程式從 Oracle 移動到 Postgres,并從一臺服務器移動到另一臺服務器。我們可以在本地(使用run-app)運行我們的應用程式而不會出現問題,因此我們認為 Oracle -> Postgres 轉換不是我們所看到的問題的原因;我們相信這是因為從一種環境切換到另一種環境。
我們看到一個問題,我們希望 Grails defaultAction處理對“/OurApp/loginStatus/”的請求。我們真的希望這個 URL 映射到它在其他環境中所做的“OurApp/loginStatus/index”。
這是一個精簡的 LoginStatusController:
class LoginStatusController {
def index() {
render([success: true] as JSON)
}
}
Tomcat 日志記錄
我們打開了RequestDumperFilter,您可以在此處看到 URL 和應用程式路徑之間的差異:
requestURI=/OurApp/loginStatus/
servletPath=/loginStatus/index.jsp
應用程式日志
添加額外的 spring-security 日志記錄為我們提供了:
收到“/loginStatus/index.jsp”的請求:
servletPath:/loginStatus/index.jsp
配置
我已經查看了server.xml、web.xml和context.xml,但我沒有看到任何可以解釋為什么我們的新環境會以不同方式處理這些請求的內容。
我們無法判斷 Tomcat 或 Grails 是否存在問題,甚至無法進一步除錯。新服務器只能通過遠程 Windows 作業系統訪問,該作業系統缺乏進行任何遠程除錯的工具。
uj5u.com熱心網友回復:
問題的原因是檔案中添加了 catalina 選項tomcat.service。特定的選項是:
org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
這是與其他幾個選項( 、 等)一起添加的RECYCLE_FACADES,ALLOW_BACKSPLASH作為在不考慮影響的情況下在新環境中保護服務器的一種方法。
這是有關此設定的官方 Tomcat 8 配置檔案:
此系統屬性的默認值為 false。
如果這是真的,默認值將被更改為:
- org.apache.catalina.core。ApplicationContext.GET_RESOURCE_REQUIRE_SLASH
- org.apache.catalina.core。ApplicationDispatcher.WRAP_SAME_OBJECT
- org.apache.catalina.core。StandardHostValve.ACCESS_SESSION
- org.apache.catalina.session。StandardSession.ACTIVITY_CHECK
- org.apache.catalina.session。StandardSession.LAST_ACCESS_AT_START
- org.apache.tomcat.util.http。服務器Cookie.STRICT_NAMING
- 任何 HTTP 連接器或 AJP 連接器元素的 URIEncoding 屬性。
- 任何 Context 元素的 resourceOnlyServlets 屬性。任何 Context 元素的 tldValidation 屬性。
- 任何 Context 元素的 useRelativeRedirects 屬性。
- 任何 Context 元素的 xmlNamespaceAware 屬性。
- 任何 Context 元素的 xmlValidation 屬性。
我們只恢復了該選項,并且我們的 servlet 路徑不再在 Tomcat 和應用程式之間更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/530086.html
上一篇:TEST_log4j.xml:3:22:元素“log4j:configuration”的前綴“log4j”未系結
