我在WebLogic 12C中部署Spring启动应用程序时遇到了问题。
10.4.4 403禁止 服务器理解请求,但拒绝履行请求。授权无效,请求不应重复。如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因。当服务器不希望明确拒绝请求的原因,或者没有其他响应适用时,通常会使用此状态代码。
我想知道是否有人可以提供帮助。
答案 0 :(得分:32)
我查看了您的代码,并在此类代码中发现了一个问题: 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>
答案 1 :(得分:4)
如果您要使用multipart
文件请求,您仍可能在部署战争时遇到问题。
问题的根源是OrderedCharacterEncodingFilter在HiddenHttpMethodFilter之后运行。 HiddenHttpMethodFilter
在请求上调用getParameter
时触发请求正文的处理。然后OrderedCharacterEncodingFilter
运行并设置请求的编码。在处理完正文之后设置请求的编码是不好的,在WebLogic上,会导致请求失去对其所有多部分数据的跟踪。
解决方法是在application.properties中禁用字符编码过滤器:
spring.http.encoding.enabled: false
答案 2 :(得分:3)
您需要添加&#34;实现WebApplicationInitializer&#34;你的hello.Application。
这是多余的,因为它扩展了SpringBootServletInitializer,它本身实现了WebApplicationInitializer,但是,正如@Pierre指出的那样,weblogic需要一个类来直接实现它。
答案 3 :(得分:2)
我上次遇到这个问题。应用此帖子中的所有提案后,我仍然收到错误403.在我的情况下,问题出在web.xml
文件中。我使用的是2.5版而不是3.0版而未将其配置为通过ApplicationContext
加载DispatcherServlet
。
来自帖子:What exactly is the web-app version? What does it affect?。
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并开始工作。
答案 4 :(得分: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);
}
}