繁体   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