wildfly 12 和 spring java 配置,不工作,403 错误

Posted

技术标签:

【中文标题】wildfly 12 和 spring java 配置,不工作,403 错误【英文标题】:wildfly 12 and spring java config, not working , 403 error 【发布时间】:2018-05-19 17:11:03 【问题描述】:

几个小时以来,我一直在尝试让这个简单的应用程序在 Wildfly 12 上运行,该应用程序在 tomcat 上运行良好。下面的任何方式都是日志和配置

Webappinitializer

@Configuration
public class ListenerConfig implements WebApplicationInitializer

    @Override
    public void onStartup(final ServletContext servletContext) throws ServletException 
        final AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
        root.setServletContext(servletContext);
        root.scan("com.app");
        root.refresh();

        final Dynamic servlet = servletContext.addServlet("spring", new DispatcherServlet(root));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/*");
        servletContext.addListener(new ContextLoaderListener(root));
    

应用配置

@Configuration
@ComponentScan(basePackages = "com.app")
@PropertySource(value =  "classpath:jdbc.properties" )
@EnableTransactionManagement
public class ApplicationConfig 

MVC配置

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter

    @Override
    public void configureMessageConverters( List<HttpMessageConverter<?>> converters ) 
        converters.add(converter());
    

    @Bean
    public ViewResolver viewResolver() 
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");

        return viewResolver;
    
    @Bean  
    public UrlBasedViewResolver setupViewResolver()   
        UrlBasedViewResolver resolver = new UrlBasedViewResolver();  
        resolver.setPrefix("/html/");  
        resolver.setSuffix(".jsp");  
        resolver.setViewClass(JstlView.class);  
        return resolver;  
    

jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-deployment-structure>  
    <deployment>  
         <dependencies>  
              <module name="javax.api"/>
              <module name="javax.jms.api"/>
              <module name="javax.servlet.api"/>
              <module name="org.apache.log4j"/>
              <module name="pluto.lib" />  
        </dependencies>  
    </deployment>  
</jboss-deployment-structure>

注意我没有提供完整的代码,如果需要会发布它。

最后我得到的日志如下

22:36:39,374 信息 [org.jboss.as.connector.subsystems.datasources] (MSC服务线程1-2)WFLYJCA0001:绑定数据源 [java:jboss/datasources/ExampleDS] 22:36:40,290 信息 [org.wildfly.extension.undertow](MSC 服务线程 1-4)WFLYUT0006: Undertow HTTPS 监听器 https 监听 127.0.0.1:8443 22:36:40,504 INFO [org.jboss.ws.common.management](MSC 服务线程 1-3) JBWS022052:启动 JBossWS 5.2.0.Final (Apache CXF 3.2.2) 22:36:43,005 信息 [org.infinispan.factories.GlobalComponentRegistry] (MSC服务线程1-4)ISPN000128:Infinispan版本:Infinispan '巴士底狱' 9.1.6.Final 22:36:43,650 信息 [org.jboss.as.clustering.infinispan] (ServerService 线程池 -- 62) WFLYCLINF0002:从 ejb 容器启动客户端映射缓存 22:36:44,314 信息 [org.wildfly.extension.undertow] (ServerService 线程池 -- 64) WFLYUT0021: 注册的 web 上下文: '/Pluto' for 服务器“默认服务器”22:36:44,412 信息 [org.jboss.as.server] (ServerService 线程池 -- 37) WFLYSRV0010: 已部署“Pluto.war” (运行时名称:“Pluto.war”)22:36:44,857 INFO [org.jboss.as.server] (控制器引导线程)​​WFLYSRV0212:恢复服务器 22:36:44,863 INFO [org.jboss.as](控制器引导线程)​​WFLYSRV0060:Http 监听http://127.0.0.1:9990/management的管理界面 22:36:44,863 INFO [org.jboss.as](控制器引导线程) WFLYSRV0051:管理控制台监听http://127.0.0.1:9990

Pluto.war 是应用程序,我得到 403 被禁止,我尝试了很多东西,我觉得 Jboss 根本无法选择调度程序 servlet,我使用 spring 和 jboss 作为 7.1,但后来它是 xml 配置,我不使用 maven,所以这里没有 pom.xml,同样的配置在 tomcat 8 中运行良好。

删除自定义库并将所有库放在 web-inf/lib 文件夹中并从 web-inf 中删除 jboss-deployment-structure.xml 后,它工作正常。如果是自定义模块,我在做什么错?我在 modules 文件夹下创建 pluto.lib.main 并将其添加到standalone.xml中

 <subsystem xmlns="urn:jboss:domain:ee:4.0">
            <global-modules>
                <module name="pluto.lib" slot="main"/>
            </global-modules>

然后我面临 403 错误

【问题讨论】:

您使用什么网址访问系统? localhost:8443/Pluto 与 https? 您不需要这个 jboss-deployment-structure.xml 文件来使用 Wildfly 进行部署,也不需要以这种方式更改standalone.xml 中的子系统域。删除文件并移除更改。 URL 是 localhost:8081/Pluto,是 http,不是 https 我已经完成了您建议的两项更改,并重新启动了服务器。无论如何我启用了日志调试,现在我可以在请求 url 时看到这一点。 /Pluto/ 的身份验证结果已尝试,与 undertow 相关。我认为现在谈论 url 是没有意义的,因为 spring bean 根本没有加载,没有请求映射或任何与 spring 相关的事情正在发生,就像 spring 已经死了:P 您的 ApplicationContext.xml 配置是否正确?示例:***.com/a/28418012/5626568 【参考方案1】:

经过长时间的痛苦调试以及对不同版本的 spring 和 wild fly 的反复试验,我得出的结论是,由 spring 4.3 组成的自定义模块无法在 wildfly 12 上运行。

无论如何,解决方案是将应用服务器降级到 wildfly 11。相同的模块和 .war 在版本 11 上运行顺利。

我在版本 12 上启用了调试日志,但日志中仍然没有任何可能显示根本原因的内容,我认为存在与 wildfy 版本 12 和 spring 相关的一些错误。

到目前为止,这似乎工作正常,如果有人能够在 wildfly 12 上使用 java config 找到 spring 解决方案,请发布答案:)

【讨论】:

以上是关于wildfly 12 和 spring java 配置,不工作,403 错误的主要内容,如果未能解决你的问题,请参考以下文章

在wildfly上运行war spring roo 2.0.0 RC1

将图像文件夹映射到 Spring MVC 和 Wildfly

Spring Boot 2 重新部署到 Wildfly 10 后无法刷新 JMS 连接

如何在 Wildfly 中将外部属性文件加载到 Spring Boot

JBoss wildfly 10禁止访问spring mvc Web应用程序

在 Wildfly 上运行时 Spring Boot 应用程序问题(bean 创建错误)