【问题标题】:Spring security 4.0.1 and Spring 4.2.0.RC1 stompBrokerRelayMessageHandler bean error with RabbitMQSpring security 4.0.1 和 Spring 4.2.0.RC1 stompBrokerRelayMessageHandler bean 错误与 RabbitMQ
【发布时间】:2015-09-01 14:58:07
【问题描述】:

我有一个 Spring Boot 应用程序。我刚刚升级了我的 pom 文件以使用 spring security 4.0.1 和 spring-boot-starter-parent 1.3.0.M1,当我更改为 spring boot 1.3.0.M1 时我看到了这个错误。

org.springframework.context.ApplicationContextException: Failed to start bean 'stompBrokerRelayMessageHandler'; nested exception is java.lang.NoClassDefFoundError: reactor/io/codec/Codec
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:825)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:140)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:524)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:678)
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:339)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:274)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:931)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:920)
    at org.syncServer.core.Application.main(Application.java:56)
Caused by: java.lang.NoClassDefFoundError: reactor/io/codec/Codec
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.startInternal(StompBrokerRelayMessageHandler.java:382)
    at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.start(AbstractBrokerMessageHandler.java:164)
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
    ... 14 common frames omitted
Caused by: java.lang.ClassNotFoundException: reactor.io.codec.Codec
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 29 common frames omitted

这里是WebSocketMessageBrokerConfigurer接口的实现

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig  implements WebSocketMessageBrokerConfigurer {
    /// AbstractSecurityWebSocketMessageBrokerConfigurer


    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
//      config.enableSimpleBroker("/topic/", "/queue/");
        config.enableStompBrokerRelay("/topic/",
                                      "/queue/",
                                      "/sync/", 
                                      "/syncError/", 
                                      "/syncUpgrade/", 
                                      // the queues that starts with "/exchange/amp.direct/" will be autodelete queues
                                      "/exchange/amp.direct/syncError/",
                                      "/exchange/amp.direct/syncCreateAccount/"

                                        )
        .setRelayHost("127.0.0.6")
        .setRelayPort(61613)
        .setClientLogin("guest")
        .setClientPasscode("guest")
        .setSystemLogin("guest")
        .setSystemPasscode("guest")
        .setSystemHeartbeatSendInterval(5000)
        .setSystemHeartbeatReceiveInterval(4000)
        ;


        // this is the prefix of the app. 
        // on the controller side this will be deleted automatically
        // thus when using 
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/syncServerEndPoint");

    }


    @Override
    public void configureClientInboundChannel(ChannelRegistration channelRegistration) {

    }

    @Override
    public void configureClientOutboundChannel(ChannelRegistration channelRegistration) {
    }

    @Override
    public boolean configureMessageConverters(List<MessageConverter> arg0) {

        return true;
    }

    @Override
    public void configureWebSocketTransport(WebSocketTransportRegistration arg0) {


        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)
     * @see org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer#addArgumentResolvers(java.util.List)

     */
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> arg0) {
        System.out.println("WEB SOCKET ARGUMENT RESOLVER");

    }

    /* (non-Javadoc)
     * @see org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer#addReturnValueHandlers(java.util.List)
     *
     */
    @Override
    public void addReturnValueHandlers(
            List<HandlerMethodReturnValueHandler> arg0) {
        System.out.println("WEB SOCKET RETURN VALUE HANDLER");

    }

我的 pom 文件有全部内容:

<dependency>
    <groupId>org.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>1.1.6.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.projectreactor</groupId>
    <artifactId>reactor-net</artifactId>
    <version>1.1.6.RELEASE</version>
</dependency>


<dependency>
    <groupId>org.projectreactor</groupId>
    <artifactId>reactor-tcp</artifactId>
    <version>1.0.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.projectreactor</groupId>
    <artifactId>reactor-spring</artifactId>
    <version>1.0.1.RELEASE</version>
</dependency>

为什么我在这里收到此错误。我正在使用 RabitMQ 作为代理

补充:我已经看到,如果我在我的 WebSocketConfig 中注释掉 enableStompBrokerRelay 并启用相应的简单代理,即

config.enableSimpleBroker("/topic/", "/queue/");

应用程序启动正常。

所以这是一些配置问题。 netstat -apn 显示我的兔子正在按预期监听端口 127.0.0.6 端口 61613。

tcp 0 0 127.0.0.6:61613 0.0.0.0:* LISTEN 2318/beam.smp

来宾的凭据也很好,即我连接到http://localhost:15672/ 确保来宾用户存在并且它具有管理员权限。

现在的问题是这个 Reactor2StompCodec 类应该做什么。我无法在 github 上找到示例工作配置

添加 2015 年 6 月 18 日:我无法理解问题,但我找到了一种解决方法,即 spring-boot-starter-parent : 1.2.5.BUILD-SNAPSHOT 并且我通过财产即 spring-security.version:4.0.2.CI-SNAPSHOT。有了这个星座,它确实有效。有趣的是,如果我将 spring-boot-starter-parent 更改为 1.3.0.BUILD-SNAPSHOT 或 1.3.0.M1 它不起作用。所以也许这与spring boot项目有关。至少我现在有一个解决方法,我可以使用 spring security 4.0

【问题讨论】:

    标签: spring spring-security spring-boot stomp reactor


    【解决方案1】:

    找到答案,即从以下链接:

    “最新版Spring需要reactor 2.0,”

    https://github.com/spring-projects/spring-boot/issues/3459

    将 reactor groupid 更改为下面的,现在一切正常:

        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
    
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-net</artifactId>
        <version>2.0.4.RELEASE</version>
        </dependency>
    
         <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.0.30.Final</version>
        </dependency>
    

    【讨论】:

      猜你喜欢
      • 2015-07-18
      • 2017-05-29
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      相关资源
      最近更新 更多