簡體   English   中英

在 Weblogic 中部署 Spring Boot app

[英]Deploy Spring Boot app in Weblogic

我在 webLogic 12C 中部署 Spring 引導應用程序時遇到問題。

10.4.4 403 Forbidden 服務器理解請求,但拒絕執行請求。 授權無濟於事,不應重復請求。 如果請求方法不是 HEAD 並且服務器希望公開請求未完成的原因,它應該在實體中描述拒絕的原因。 當服務器不想透露請求被拒絕的確切原因,或者沒有其他響應適用時,通常使用此狀態代碼。

我想知道是否有人可以提供幫助。

我查看了您的代碼並在您的此類代碼中看到了一個問題: https : //github.com/purrox/Spring-example/blob/master/src/main/java/hello/Application.java

您做得正確(如 SpringBoot 文檔中所定義),但似乎 Weblogic12C 存在錯誤(或者可能是對標准的解釋)。 似乎 Weblogic12C 搜索直接實現 WebApplicationInitializer 的類。 請注意您的代碼如何擴展 SpringBootServletInitializer(實現 WebApplicationInitializer)。 Weblogic12C 不喜歡它看起來的樣子。 因此,最簡單的方法是讓您的 Application 類實現 WebApplicationInitializer。 所以,改變這一行:

public class Application extends SpringBootServletInitializer {  

對此:

public class Application extends SpringBootServletInitializer implements WebApplicationInitializer {  

注意:一旦您修復了上述問題,您將遇到另一個 Weblogic12C 部署問題:“java.lang.IllegalArgumentException:LoggerFactory 不是 Logback LoggerContext 但 Logback 在類路徑上”。 要解決其他問題,請創建一個新文件 src/main/webapp/WEB-INF/weblogic.xml 並將以下內容放入其中:

    <?xml version="1.0" encoding="UTF-8"?>
    <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
        <wls:weblogic-version>12.1.1</wls:weblogic-version>
        <wls:context-root>helloApp</wls:context-root>
        <wls:container-descriptor>
            <wls:prefer-application-packages>
                <wls:package-name>org.slf4j.*</wls:package-name>
            </wls:prefer-application-packages>
        </wls:container-descriptor>
    </wls:weblogic-web-app>

如果您打算使用multipart文件請求,您可能仍然會在部署戰爭時發現問題。

問題的根源在於 OrderedCharacterEncodingFilter 在 HiddenHttpMethodFilter 之后運行。 HiddenHttpMethodFilter在對請求調用getParameter時觸發對請求正文的處理。 OrderedCharacterEncodingFilter然后運行並設置請求的編碼。 在處理完請求正文后設置請求的編碼是錯誤的,並且在 WebLogic 上會導致請求丟失對其所有多部分數據的跟蹤。

解決方法是禁用 application.properties 中的字符編碼過濾器:

spring.http.encoding.enabled: false

您需要在 hello.Application 中添加“implements WebApplicationInitializer”。

這是多余的,因為它擴展了 SpringBootServletInitializer,它本身實現了 WebApplicationInitializer,但是,正如@Pierre 指出的那樣,weblogic 需要一個類來直接實現它。

我上次碰到這個問題。 在應用了這篇文章中的所有建議后,我仍然收到錯誤 403。就我而言,問題出在web.xml文件中。 我使用的是 2.5 版而不是 3.0 版,而沒有將其配置為通過DispatcherServlet加載ApplicationContext

來自帖子: 網絡應用程序版本到底是什么? 它有什么影響? .

Versioning refers to XML schema version that syntax of your web.xml file must obey. More important, it also indicates the version of Servlet specification that your application implements.

從 Spring 文檔http://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html

Older Servlet containers don’t have support for the ServletContextInitializer bootstrap process used in Servlet 3.0. You can still use Spring and Spring Boot in these containers but you are going to need to add a web.xml to your application and configure it to load an ApplicationContext via a DispatcherServlet.

最后,我將web.xml文件的版本更改為 3.0,它開始工作。

我在將 SpringBoot 2.3.5.RELEASE 應用程序部署到 Oracle WebLogic Server 12.2.1.4.0 版本時遇到了同樣的問題。 在我的情況下只是實現 SpringBootServletInitializer 解決了它,不需要實現 WebApplicationInitializer

@SpringBootApplication
@RestController
public class Application extends SpringBootServletInitializer {


    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

}

參考本項目在weblogic 12.1.3服務器部署spring啟動應用。 (主要是 pom.xml、weblogic.xml 等文件

https://github.com/baranirajarathinam/wls1213

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM