2016-04-27 4 views
0

У меня этот монолитный JAR в моей текущей конфигурации веб-сервера. Вся система была разработана таким образом, что у вас не может быть отдельных веб-приложений, все работает вокруг этой большой банки.Можно ли клонировать класс в Java?

В процессе решения этого вопроса я пытаюсь вывести аутентификацию sso из исходного пакета безопасности (который у меня есть исходный код), проблема, с которой я имею дело, связана с классом Usuario.

Из того, что я понимаю, оригинальный класс будет установлен atribute «Новичок», после получения atributes от tokenid

usuario = ssoUtil.getAtributosUsuario(tokenId); 

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

я изменил класс Новичок в UsuarioSSO и реализовали все аутентификации вещь как глобальный серверный фильтр - поскольку это требование проекта, что невозможно публиковать что-либо на сервере без проверки подлинности.

Фактический класс Usuario - тот, который установлен - это всего лишь куча частных переменных, геттеров, сеттеров и двух методов с реализацией классов Serializable и HttpSessionBindingListener.

Проблема возникает тогда, когда какие-либо классы от исходной задачи INTL попытаться получить atributes Новичок из HTTPSession:

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

То, что я пытаюсь добиться, чтобы получить этот бросок работать. Но кажется невозможным сделать нисходящий, даже оба класса идентичны.

Просто FYI, я могу изменить класс INTL Usuario по своему усмотрению, но я не могу изменить код, который фактически использует этот класс, все будет работать нормально, если я могу изменить все ссылки на INTL Usuario на UsuarioSSO.

Любые предложения?

+0

Не может UsuarioSSO расширить Usuario? –

+1

Зачем дублировать код? Переместите исходный класс 'Usuario' из большой банки в отдельную банку. Затем используйте эту банку в существующем приложении и новый фильтр. – erickson

+0

Если я переведу класс в отдельную банку, мне все равно нужно использовать старые соглашения об именах пакетов или изменить все ссылки на исходный класс Usuario. –

ответ

1

Я согласен с комментариями Эриксона. Вы можете переместить класс в отдельную банку. Вы все равно можете сохранить исходное имя пакета.

В двух банках могут использоваться те же названия пакетов. Единственный момент, когда это странно, - это то, что эти пакеты имеют одинаковые классы. Но это должно быть проблемой, если вы переместите класс Usuario.

+0

Это одно решение, но оно не нужно. Разве нет способа сделать это без необходимости переместить класс в отдельную банку? –

+0

Вы хотите сделать глубокий клон на объекте INTL Usuario и предоставить клон UsuarioSSO? – user2347763

+0

Я хотел поставить клон в INTL Usuario. –

Смежные вопросы