Я разработал плагин для ActiveMQ для аутентификации с использованием плагина JAAS.Но у меня есть две проблемы:
- Я просто хочу применить аутентификацию к MQTT transportConnector, но никаких других.
- Я хочу включить тему в процесс аутентификации.Используя 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";
};