Плагин ActiveMQ JAAS только для MQTT transportConnector - PullRequest
0 голосов
/ 27 мая 2019

Я разработал плагин для ActiveMQ для аутентификации с использованием плагина JAAS.Но у меня есть две проблемы:

  1. Я просто хочу применить аутентификацию к MQTT transportConnector, но никаких других.
  2. Я хочу включить тему в процесс аутентификации.Используя JAAS, он просто выполняет аутентификацию на основе имени пользователя, пароля и статической конфигурации, используя authorizationEntry.Есть ли лучший вариант?

Вот часть кода:

public class TrackingLoginModule implements LoginModule {

    // Define fields

    @Override
    public void initialize(
            final Subject subject,
            final CallbackHandler callbackHandler,
            final Map sharedState,
            final Map options
    ) {
        this.subject = subject;
        this.callbackHandler = callbackHandler;
        this.loginSucceeded = false;
        this.debug = "true".equalsIgnoreCase((String) options.get("debug"));
        this.serviceUrl = (String) options.get("serviceUrl");
        this.adminUser = (String) options.get("adminUser");
        this.adminPass = (String) options.get("adminPass");
    }

    @Override
    public boolean login() throws LoginException {
        // Pass the param to authorize and process the signin
    }

    @Override
    public boolean commit() throws LoginException {
        // ...
    }

    @Override
    public boolean abort() throws LoginException {
        // ...
    }

    @Override
    public boolean logout() throws LoginException {
        // ...
    }

    private void clear() {
        this.user = null;
        this.loginSucceeded = false;
    }

    private boolean authenticate(final String username, final String password) throws IOException {
        // Do the authentication based on username and password
    }

}

И некоторые необходимые конфигурации в activemq.xml:

    <plugins>
        <!-- M2M Authentication plugin -->
        <jaasAuthenticationPlugin configuration="TrackingLoginModule"/>

        <!-- Authorization settings -->
        <authorizationPlugin>
            <map>
                <authorizationMap>
                    <authorizationEntries>
                        <authorizationEntry queue=">"
                              read=""
                              write=""
                              admin="" />
                        <authorizationEntry topic=">"
                              read="server"
                              write=""
                              admin="server"
                              groupClass="co.evertrace.mqtt.plugin.TrackingGroupPrincipal" />
                        <authorizationEntry topic="event"
                              read="client"
                              write="server"
                              admin="server"
                              groupClass="co.evertrace.mqtt.plugin.TrackingGroupPrincipal" />
                    </authorizationEntries>
                </authorizationMap>
            </map>
        </authorizationPlugin>
    </plugins>

И login.config:

TrackingLoginModule {
        co.evertrace.mqtt.plugin.TrackingLoginModule required
                debug=true
                adminUser="<USER>"
                adminPass="<PASS>"
                serviceUrl="http://localhost/my/service";
};
...