返回

掌握一次踩坑经历,备战MQTT生产环境

后端

在编写本文前,曾有读者询问:“我是做MQTT开发的,这次准备在SpringBoot项目里搭建MQTT生产环境,由于之前的项目中采用的是匿名方式,所以这次在搭建时,也顺其自然的用上了匿名方式,可是上线后却遇到了些问题”。

基于以上问题,本文将详细叙述如何从匿名方式切换到用户认证方式。

从匿名方式到用户认证方式的切换过程

  1. 修改配置文件

    首先,我们需要修改SpringBoot项目的配置文件,将匿名方式改为用户认证方式。

    mqtt.username = test
    mqtt.password = 123456
    
  2. 在SpringBoot项目中添加认证过滤器

    接下来,我们需要在SpringBoot项目中添加一个认证过滤器。

    @Bean
    public MqttFilterSecurityInterceptor mqttFilterSecurityInterceptor() {
        MqttFilterSecurityInterceptor filter = new MqttFilterSecurityInterceptor();
        filter.setAuthenticationManager(authenticationManager());
        return filter;
    }
    
  3. 实现认证管理器

    现在,我们需要实现一个认证管理器。

    @Bean
    public AuthenticationManager authenticationManager() {
        return new SimpleAuthenticationManager(authenticationProvider());
    }
    
  4. 实现身份验证提供程序

    最后,我们需要实现一个身份验证提供程序。

    @Bean
    public AuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService());
        return authenticationProvider;
    }
    

踩过的坑

在从匿名方式切换到用户认证方式的过程中,笔者也踩过不少坑,现分享给大家,希望能帮助大家避开这些坑。

  1. 认证失败

    在切换到用户认证方式后,笔者发现客户端无法连接到MQTT服务器,经过排查,发现是认证失败导致的。原来,在修改配置文件时,笔者忘记了设置用户名和密码。

  2. 权限不足

    在解决了认证失败的问题后,笔者发现客户端虽然能够连接到MQTT服务器,但无法发布或订阅消息。经过排查,发现是权限不足导致的。原来,在实现身份验证提供程序时,笔者忘记了设置用户的权限。

小结

通过本文,相信大家已经对从匿名方式切换到用户认证方式有了一个清晰的认识。希望本文能够帮助大家在搭建MQTT生产环境时少踩坑,少走弯路。

我希望这篇文章能对您有所帮助。如果您有任何问题或建议,请随时与我联系。