2016-04-27 7 views
0

Ich habe diese Monolith JAR in meiner aktuellen Webserver-Konfiguration. Das ganze System wurde so gezeichnet, dass man keine separaten Web-Apps haben kann, alles läuft um diesen großen Krug herum.Ist es möglich, eine Klasse in Java zu klonen?

In dem Prozess der Lösung dieses Problems, ich versuche, die SSO-Authentifizierung aus dem ursprünglichen Sicherheitspaket (die ich habe den Quellcode), das Problem, mit dem ich es zu tun habe betrifft eine Usuario-Klasse.

Von dem, was ich verstehe, wird gesetzt die ursprüngliche Klasse eine ‚usuario‘ atribute, nachdem die atributes vom TokenID bekommen

usuario = ssoUtil.getAtributosUsuario(tokenId); 

httpSession.setAttribute("usuario", usuario); 
httpServletRequest.setAttribute("usuario", usuario); 

ich UsuarioSSO die Usuario Klasse geändert, und implementiert die gesamte Authentifizierung etwas wie ein globaler Server-Filter - da es eine Anforderung des Projekts ist, dass es unmöglich ist, etwas auf dem Server ohne Authentifizierung zu veröffentlichen.

Die eigentliche Usuario-Klasse - die, die gesetzt ist - ist nur eine Reihe von privaten Variablen, Getter, Setter und zwei Methoden mit der Implementierung der Klassen Serializable und HttpSessionBindingListener.

Das Problem tritt auf, wenn alle Klassen aus dem ursprünglichen INTL Problem versuchen die Usuario atributes vom Http zu bekommen:

java.lang.ClassCastException: pathToClass.UsuarioSSO cannot be cast to intlPathToClass.Usuario 

Was ich versuche diese Besetzung zu erreichen, ist an der Arbeit. Aber es scheint unmöglich, einen Downcast zu machen, auch wenn beide Klassen identisch sind.

Nur FYI, ich kann die INTL Usuario-Klasse nach Belieben ändern, aber ich kann den Code nicht ändern, der diese Klasse tatsächlich verwendet, alles würde gut funktionieren, wenn ich alle Verweise auf INTL Usuario auf UsuarioSSO ändern könnte.

Irgendwelche Vorschläge?

+0

Kann UsuarioSSO Usuario erweitern? –

+1

Warum den Code duplizieren? Verschiebe die ursprüngliche "Usuario" -Klasse vom großen Glas in ein separates Glas. Verwenden Sie dann dieses Glas in der vorhandenen Anwendung und Ihrem neuen Filter. – erickson

+0

Wenn ich die Klasse in ein separates Jar verschiebe, muss ich immer noch die alten Paketbenennungskonventionen verwenden oder alle Verweise auf die ursprüngliche Usuario-Klasse ändern. –

Antwort

1

Ich stimme Ericksons Kommentare. Sie können die Klasse in ein separates Glas verschieben. Sie können den ursprünglichen Paketnamen beibehalten.

Zwei Gläser können die gleichen Paketnamen verwenden. Das einzige Mal, wenn es komisch wird, ist, wenn diese Pakete die gleichen Klassen haben. Aber das sollte ein Problem sein, wenn Sie die Usuario-Klasse verschieben.

+0

Dies ist eine Lösung, aber es fühlt sich unnötig an. Gibt es keine Möglichkeit, dies zu tun, ohne die Klasse in ein separates Gefäß zu verschieben? –

+0

Möchten Sie einen tiefen Klon auf dem INTL Usuario-Objekt erstellen und den Klon an UsuarioSSO bereitstellen? – user2347763

+0

Ich wollte den Klon INTL Usuario liefern. –