J'essaie de faire des appels EJB à distance sur mon serveur EAP Wildfly 10/JBoss 7, mais je reçois toujours des messages d'erreur d'utilisateur invalide sur mon serveur Wildfly (mon EJB est appelé LoginManager) :Problème avec l'authentification avec des appels EJB distants à Wildfly 10
23:04:02,872 ERROR [org.jboss.as.ejb3.invocation] (default task-6) WFLYEJB0034: EJB Invocation failed on component LoginManager for method public abstract java.lang.String ejbs.LoginManagerRemote.echo(java.lang.String): javax.ejb.EJBAccessException: WFLYSEC0027: Invalid User
at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:69)
at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:49)
at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:97)
J'ai ajouté mon utilisateur au fichier application-users.properties en utilisant les scripts add-user.sh/bat.
J'ai essayé de mettre en points d'arrêt dans le serveur wildfly lui-même dans la classe SecurityContextInterceptor
en ligne 54 et voir que le principal est nul:
if (holder.skipAuthentication == false) {
holder.securityManager.authenticate(holder.runAs, holder.runAsPrincipal, holder.extraRoles);
Je ne suis pas tout à fait sûr que ce runAs
ou runAsPrincipal
est le principal/credentials passé par l'appel EJB distant, mais je soupçonne qu'il pourrait être responsable de mon problème.
J'appelle la ejb à distance comme:
Properties p = new Properties();
p.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(p);
LoginManagerRemote ejb = (LoginManagerRemote) context.lookup("ejb:ear-1.0/ejbs-1.0//LoginManager!ejbs.LoginManagerRemote");
return ejb.echo("test");
avec mes jboss-ejb-client.properties comme:
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.conncetion.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=JBOSS-LOCAL-USER
remote.connection.default.username=test
remote.connection.default.password=test
Ai-je fait quelque chose de mal? Est-ce que je manque quelque chose d'évident quelque part? Que dois-je faire pour appeler avec succès un EJB distant?