2016-04-27 2 views
0

J'ai ce JAR monolithe dans ma configuration de serveur Web actuelle. L'ensemble du système a été dessiné de telle sorte que vous ne pouvez pas avoir des applications Web distinctes, tout tourne autour de ce grand pot. Dans le processus de résolution, j'essaye de retirer l'authentification sso du paquet de sécurité d'origine (dont j'ai le code source), le problème auquel je suis confronté est lié à une classe Usuario.Est-il possible de cloner une classe en Java?

D'après ce que je comprends, la classe originale établira un atribute « usuario », après avoir obtenu les atributs du tokenid

usuario = ssoUtil.getAtributosUsuario(tokenId); 

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

J'ai changé la classe Usuario à UsuarioSSO, et mis en œuvre toute chose d'authentification en tant que filtre de serveur global - puisque c'est une exigence du projet qu'il est impossible de publier quoi que ce soit sur le serveur sans authentification.

La classe Usuario actuelle - celle qui est définie - est juste un groupe de variables privées, getters, setters et deux méthodes avec l'implémentation des classes Serializable et HttpSessionBindingListener.

La question se pose lorsque toutes les classes du problème d'origine INTL tentent d'obtenir le Usuario atributs du httpsession:

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

Ce que je suis en train d'atteindre est d'obtenir ce casting de travailler. Mais il semble impossible de faire un downcast, même si les deux classes sont identiques. Juste pour info, je peux changer la classe INTL Usuario à volonté, mais je ne peux pas changer le code qui utilise réellement cette classe, tout irait bien si je pouvais changer toutes les références à Usuario INTL à UsuarioSSO.

Des suggestions?

+0

L'utilisateur ne peut-il pas étendre l'Usuario? –

+1

Pourquoi dupliquer le code? Déplacez la classe 'Usuario' d'origine du grand pot dans un pot séparé. Ensuite, utilisez ce pot dans l'application existante et votre nouveau filtre. – erickson

+0

Si je déplace la classe dans un fichier jar distinct, je dois toujours utiliser les anciennes conventions de dénomination de paquet, ou modifier toutes les références à la classe Usuario d'origine. –

Répondre

1

Je suis d'accord avec les commentaires d'Erickson. Vous pouvez déplacer la classe dans un pot séparé. Vous pouvez toujours conserver le nom du package d'origine.

Deux bocaux peuvent utiliser les mêmes noms de paquets. La seule fois où cela devient bizarre, c'est que ces paquets ont les mêmes classes. Mais cela devrait poser un problème si vous déplacez la classe Usuario.

+0

Ceci est une solution, mais cela ne semble pas nécessaire. N'y at-il pas un moyen de le faire sans avoir à déplacer la classe dans un pot séparé? –

+0

Voulez-vous faire un clone en profondeur sur l'objet INTL Usuario et fournir le clone à UsuarioSSO? – user2347763

+0

Je voulais fournir le clone à INTL Usuario. –