在 Weblogic 中部署 Spring Boot 应用程序

2022-09-04 05:21:49

我在 webLogic 12C 中部署 Spring 引导应用程序时遇到问题。

10.4.4 403 禁止访问 服务器理解请求,但拒绝满足请求。授权将无济于事,不应重复请求。如果请求方法不是HEAD,并且服务器希望公开请求未被满足的原因,则应在实体中描述拒绝的原因。当服务器不希望确切显示请求被拒绝的原因时,或者当没有其他响应适用时,通常使用此状态代码。

我想知道是否有人可以帮忙。


答案 1

我查看了您的代码,并在此类代码中发现了一个问题: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>

答案 2

如果您要使用文件请求,您可能仍然会在部署战争时发现问题。multipart

问题的根源在于 OrderedCharacterEncodingFilter 在 HiddenHttpMethodFilter 之后运行。 在请求正文调用请求时触发对请求正文的处理。 然后运行并设置请求的编码。在处理请求的主体后设置请求的编码是错误的,并且在 WebLogic 上,会导致请求丢失对其所有多部分数据的跟踪。HiddenHttpMethodFiltergetParameterOrderedCharacterEncodingFilter

解决方法是禁用 application.properties 中的字符编码筛选器:

spring.http.encoding.enabled: false

推荐