Проблемы с доступом к новому развертыванию примера приложения SpringBoot на Weblogic12C

У меня проблемы с доступом к образцу приложения springBoot после его развертывания в Weblogic12C. Он отлично работает, используя встроенный в SpringBoot сервер Tomcat.

Установите и протестируйте с помощью Springcat, встроенного в Tomcat: все хорошо

Шаги для воспроизведения: получите код приложения «Getting Started» от SpringBoot, выполнив следующие действия:https://spring.io/guides/gs/spring-boot/

мерзкий клонhttps://github.com/spring-guides/gs-spring-boot.gitcd gs-spring-boot / complete / (мы будем использовать каталог gr-spring-boot / complete, чтобы вам не приходилось просматривать страницу «Начало работы» выше (все изменения для вас выполнены в «complete»). «).откройте файл gs-spring-boot / complete / build.gradle и добавьте «apply plugin: 'war'» ниже других записей «apply plugin»

На этом этапе вы можете проверить, что все в порядке, запустив задачи «bootRun», которые запускают приложение на встроенном сервере Tomcat. После запуска tomcat перейдите на localhost: 8080 / и увидите, что вы получаете «Привет из Spring Boot!»

Теперь давайте установим это на Weblogic 12Cзапустите "gradle war" (опять же, работайте с gs-spring-boot / complete /), теперь у вас будет файл war под gs-spring-boot \ complete \ build \ libs \ complete.warперейдите на консоль weblogic12C. Я не вносил изменений в свой WL12C, поэтому консоль находится по адресу localhost: 7001 / console ПРИМЕЧАНИЕ. Я загрузил версию разработчика WL12C неделю назад с сайта Oracle. Я не вносил в него никаких изменений, так как скачал. Dev-версия WL12C для загрузки требует, чтобы мы указали ее на наш уже установленный JDK. Мой WL12C использует версию Java:

Java-версия "1.7.0_45" Java (TM) SE Runtime Environment (сборка 1.7.0_45-b18) Серверная виртуальная машина Java HotSpot (TM) (сборка 24.45-b08, смешанный режим)

в консоли разверните файл war:нажмите на "развертывания"нажмите «установить»перейдите к директории "gs-spring-boot \ complete \ build \ libs"выберите переключатель рядом с complete.war и нажмите Nextвыберите «установить как приложение» и нажмите «Далее»оставьте все опции как есть [только DD, используйте значения по умолчанию, используйте ту же доступность] и нажмите «Далее»нажмите Готово

На этом этапе вы увидите, что приложение развернуто нормально: - нажмите «развертывания» еще раз и увидите, что ваше «завершенное» приложение springBoot указано в списке и ACTIVE - нажмите «завершение» и обратите внимание на эту страницу: «Контекстный корень: / полный». ПРИМЕЧАНИЕ. Документы weblogic говорят, что если в weblogic.xml не определен контекстный корень, то он использует имя файла войны (за исключением .war)

Теперь проблема: получение 403:

если вы попытаетесь получить доступ к приложению springBoot на локальном хосте: 7001 / complete, вы получите 403 !!!

Error 403--Forbidden
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.4.4 403 Forbidden
The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.

Итак, давайте сделаем одно последнее изменение (я ловлю рыбу здесь, может быть, weblogic действительно хочет weblogic.xml):

создать каталог: gs-spring-boot \ complete \ src \ main \ webapp \ WEB-INF \ создайте этот файл: gs-spring-boot \ complete \ src \ main \ webapp \ WEB-INF \ weblogic.xmlотредактируйте файл weblogic.xml, чтобы он содержал:

Теперь вернитесь к своей консоли weblogic (localhost: 7001 / console)

<?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>testApp</wls:context-root>
</wls:weblogic-web-app>

перейдите в «веб-приложения» и установите флажок рядом с «завершить», а затем нажмите «удалить»

перезапустите свой сервер weblogic12C (просто чтобы быть параноиком)снова запустите задачу «gradle clean», а затем «gradle war», чтобы создать новый файл войныоткройте файл войны (используя winzip или любой другой) и убедитесь, что файл войны теперь имеет WEB-INF / weblogic.xmlперейдите в консоль для развертывания нового файла войны (используйте те же шаги, что и выше)убедитесь, что приложение развернуто и имеет contextRoot из / testApp (как определено в weblogic.xml)перейдите к localhost: 7001 / testApp /403 все еще там. Так:

weblogic знает об этом приложении (возвращает 403). Потому что, если бы он не знал о приложении, он вернул бы 404 (попробуйте перейти на localhost: 7001 / doesNotExist, и вы получите 404)

но похоже, что WL12C не перенаправляет запросы на весну. Раньше мы определяли кучу вещей в web.xml, но сейчас, с javaConfig и SpringBoot, все это должно делаться автоматически ...примечание: поскольку SpringBoot использует JavaConfig (Servlet3), мы не можем использовать ничего ниже weblogic12C (который является последним)Еще одна вещь, которую я пробовал: изменить RequestMappingВ приведенном выше примере кода откройте файл gs-spring-boot \ complete \ src \ main \ java \ hello \ HelloController.java и замените:

с этим:

@RequestMapping("/")

Теперь, если вы просматриваете (помните, weblogic.xml определите context-root как / testApp):

@RequestMapping("pierre.htm")

localhost: 7001 / testApp / pierre.htm вы получите 404

localhost: 7001 / testApp / вы получите 403И если вы попробуете tomcat с "gradle bootrun", вы можете получить к нему прекрасное: localhost: 8080 / pierre.htm (вы получаете "привет от SpringBoot!").

Так что это дает следующие подсказки:

Weblogic знает о / testApp

Weblogic не знает, что такое /testApp/pierre.htm. Как будто он никогда не был настроен как RequestMapping.для работы над weblogic не хватает "пружинной проводки" ....Вот где я застрял ... Кто-нибудь может подумать, что JavaConfig "проводка" мне не хватает, чтобы заставить его работать на Weblogic? Любая помощь с благодарностью. Спасибо!!

Решение

Если кто-нибудь придет сюда, чтобы сделать это проще, чем прочитать все комментарии ниже, вот как это сделать:

начните с примера приложения SpringBoot и перейдите к «полному» решению здесь: spring.io/guides/gs/convert-jar-to-war/

обновите класс WebInitializer, чтобы он реализовывал WebApplicationInitializer. Так что измени это из этого:

К этому:

    public class WebInitializer extends SpringBootServletInitializer {

создайте новый файл src / main / webapp / WEB-INF / weblogic.xml и поместите в него это содержимое:

        public class WebInitializer extends SpringBootServletInitializer implements WebApplicationInitializer {

Gradle War

<?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>
развернуть в Weblogic12Cтеперь это должно сработать :) Огромное спасибо Дэйву Сайеру и Евгению!Предыдущее решение (хранится здесь для потомков)начните с примера приложения SpringBoot и перейдите к «полному» решению здесь: spring.io/guides/gs/convert-jar-to-war/

в пакете примера приложения «привет» добавьте новый открытый класс HelloWebXml, реализующий WebApplicationInitializer

возьмите весь код из org.springframework.boot.context.web.SpringBootServletInitializer и скопируйте его в HelloWebXml, но измените следующие строки:

защищенная конфигурация SpringApplicationBuilder (приложение SpringApplicationBuilder) {возврат приложения; }

К этому:

скопируйте класс org.springframework.boot.context.web.ErrorPageFilter в пакет "hello" в примере приложения

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(Application.class);
    }
создайте новый файл src / main / webapp / WEB-INF / weblogic.xml и поместите в него это содержимое:

Gradle War

<?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>
развернуть в Weblogic12Cтеперь это должно сработать :) Огромное спасибо Дэйву Сайеру и Евгению!ПРИМЕЧАНИЕ: здесь есть похожие вопросы:

Развернуть приложение Spring Boot в Weblogic ... но этот другой вопрос касается развертывания, и он немного расплывчатый (само развертывание у меня работает нормально)Этот образец не может быть сразу преобразован в войну, просто поменяв упаковку. Вы видели «конвертирующие» руководства, например,

Ответы на вопрос(3)

Ваш ответ на вопрос