web-dev-qa-db-ja.com

WeblogicにSpring Bootアプリをデプロイする

SpringブートアプリケーションをwebLogic 12Cにデプロイできません。

10.4.4 403 Forbiddenサーバーはリクエストを理解しましたが、リクエストの実行を拒否しています。承認は役に立たず、リクエストは繰り返されるべきではありません。リクエストメソッドがHEADでなく、サーバーがリクエストが実行されなかった理由を公開したい場合は、エンティティで拒否の理由を説明する必要があります。このステータスコードは、サーバーは、要求が拒否された理由を正確に明らかにしたくない、または他の応答が該当しない場合。

誰かがそれを手伝ってくれるのかと思っていました。

11
Carlos

私はあなたのコードをレビューし、このクラスのコードに問題を見つけました: 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 {  

注:上記を修正すると、「Java.lang.IllegalArgumentException:LoggerFactory is a Logback LoggerContext but Logback is on the classpath」という別のWeblogic12Cデプロイ問題が発生します。他の問題を修正するには、新しいファイル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>
33
Pierre

multipartファイルリクエストを使用する場合でも、戦争の展開に問題が見つかることがあります。

問題の原因は、HiddenHttpMethodFilterの後にOrderedCharacterEncodingFilterが実行されていることです。 HiddenHttpMethodFilterは、リクエストに対してgetParameterを呼び出すときに、リクエスト本文の処理をトリガーします。次にOrderedCharacterEncodingFilterが実行され、リクエストのエンコーディングが設定されます。本文が処理された後にリクエストのエンコーディングを設定することは悪いことであり、WebLogicではリクエストがすべてのマルチパートデータを追跡できなくなります。

回避策は、application.propertiesの文字エンコーディングフィルターを無効にすることです。

spring.http.encoding.enabled: false
4
Naresh Hawk

「implements WebApplicationInitializer」をhello.Applicationに追加する必要があります。

これは、それ自体がWebApplicationInitializerを実装するSpringBootServletInitializerを拡張するため冗長ですが、@ Pierreが指摘しているように、weblogicはクラスを直接実装する必要があります。

3
dan carter

前回この問題に遭遇しました。この投稿のすべての提案を適用した後も、エラー403が発生しました。私の場合、問題はweb.xmlファイルにありました。 ApplicationContextを介してDispatcherServletをロードするように設定せずに、3.0ではなくバージョン2.5を使用していました。

投稿から: 正確にはウェブアプリのバージョンは何ですか?それは何に影響しますか?

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に変更し、動作を開始しました。

2
kpater87