JBoss6 Remoting

G

Gast2

Gast
Ja, über den Principal ist es vermutlich ... ein Workaround, wenn auch m.E. vertretbar.
Einfach gut dokumentieren :)

Ich mein eher, dass man für einen eigenen Principal einen SimpelPrincipal("Echo") benötigt sonst erkennt JBoss den eigenen nicht. Das sieht schon nach hack aus :D...
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Okay ein Problem hab ich noch.

Und zwar wenn ich beim JAAS anmelde und 2 Clients aufmache und 2 mal den gleichen Username eingebe wird der Login übersprungen d.h. ich komme nicht in mein TestLogin wo die sessionID vergeben wird. Gibt es da eine Möglichkeit das anders zu machen?

Und wenn ich auf dem Client ein Context.SECURITY_CREDENTIALS hinzufüge wird im Subject immer ein remove aufgerufen und der client bekommt beim nächsten call eine neue id...???:L
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Wie meinst du das, der Login übersprungen?

Ja es wird in dem LoginModule kein login und initialize aufgerufen.

Nur wenn ich auf ClientSeite Context.SECURITY_CREDENTIALS setze dann wird der principal aber auch removed und bei jedem call neu angemeldet das will ich ja auch nicht

siehe Subject methode remove zeile 1114

Könnte vielleicht daran liegen, das beide Clients in der gleichen VM liegen ?
Puh ich starte in Eclipse 2 Swing Clients eigentlich laufen die dann nicht in der gleichen VM.
 
G

Gast2

Gast
Hab grad nochmal nachgeschaut, laufen auf jeden Fall nicht in der gleichen VM!!!
Mhm gibt bestimmt irgendwo eine Einstellung oder Properties wie man das Verhalten abschalten kann.
 
G

Gast2

Gast
Hallo ich hab die Stelle gefunden und zwar folgendes:
Im org.jboss.security.plugins.auth.JaasSecurityManagerBase gibt es einen chache und der schaut wieder nach dem SimplePrincipal!!!! ;( und findet natürlich dem Namen im cache und macht dann isValid true.
Java:
    @param principal - the caller identity whose cached credentials are to
    be accessed.
    @param allowRefresh - a flag indicating if the cache access should flush
    any expired entries.
    */
   private DomainInfo getCacheInfo(Principal principal, boolean allowRefresh)
   {
      if( domainCache == null )
         return null;

      DomainInfo cacheInfo = null;
      synchronized( domainCache )
      {
          if( allowRefresh == true )
            cacheInfo = (DomainInfo) domainCache.get(principal);
          else
            cacheInfo = (DomainInfo) domainCache.peek(principal);
         if( cacheInfo != null )
            cacheInfo.acquire();
      }
      return cacheInfo;
   }

   private boolean validateCache(DomainInfo info, Object credential,
      Subject theSubject)
   {
           Object subjectCredential = info.credential;
      boolean isValid = false;
      // Check for a null credential as can be the case for an anonymous user
      if( credential == null || subjectCredential == null )
      {
         // Both credentials must be null
         isValid = (credential == null) && (subjectCredential == null);
      }

return isValid
}

   public boolean isValid(Principal principal, Object credential,
      Subject activeSubject)
   {
      // Check the cache first
      DomainInfo cacheInfo = getCacheInfo(principal, true); // hier
      if( trace )
         log.trace("Begin isValid, principal:"+principal+", cache info: "+cacheInfo);

      boolean isValid = false;
      if( cacheInfo != null )
      {
         isValid = validateCache(cacheInfo, credential, activeSubject);
         if( cacheInfo != null )
            cacheInfo.release();
      }
      if( isValid == false )
         isValid = authenticate(principal, credential, activeSubject);
      if( trace )
         log.trace("End isValid, "+isValid); 
      return isValid;
   }

Ich versuch jetzt mal den Cache abzuschalten.
CachingLoginCredentials | JBoss Community
 
G

Gast2

Gast
Da jetzt eigentlich einigermaßen alles so tut wie ich wollte, versuche ich das gleiche nochmal über REST da kann ich dann wieder den SessionScoped verwenden schauen welche Variante angenehmer ist.
 
G

Gast2

Gast
Ich weiß es ist nur Wiki, aber hab gerade nicht mehr Zeit: Representational State Transfer ? Wikipedia

Scheint wohl so zu sein:
Client:
Java:
public class RestClient {

	private static final String uri = "http://localhost:8080/project";
	
	public static void main(String[] args) {
		   // this initialization only needs to be done once per VM
        RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
        Service1 service1 = ProxyFactory.create(Service1.class, uri);
        Service2 service2 = ProxyFactory.create(Service2.class, uri);
        service1.putParam("Hallo Welt");
        System.out.println(service2.getParam());
       
	}
	
}
Server:
Bean:
Java:
@SessionScoped
public class ParamBean implements Serializable{

	private static final long serialVersionUID = -3890162219225972547L;
	
	private String name;

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
	
}

Service1
Java:
public class Service1Impl implements Service1{

	@Inject
	private ParamBean bean;
	
	@Override
	public void putParam(String param){
		bean.setParam(param);
	}

}

Service2
Java:
public class Service2Impl implements Service2{

	@Inject
	private ParamBean bean;
	
	@Override
	public String getParam(){
		return bean.getParam();
	}

}

Ist das ParamBean 2 mal eine unterschiedliche Instanz

EDIT: mal die 2 Projekte angehängt.
 

Anhänge

  • server.zip
    11,8 KB · Aufrufe: 0
  • client.zip
    3,5 KB · Aufrufe: 0
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Also nun gehts auch stateful mit sessionscope =)...

Das Problem war das die ProxyFactory jedes mal bei create einen neuen HttpClient aufmacht, wenn man einmal einen kriert und mitgibt klappt es auch ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JBoss6 UnitTest Application Tier 21

Ähnliche Java Themen

Neue Themen


Oben