То, что вы делаете, опасно, если вы делитесь веткой, в которую вносите изменения, с другими людьми. В вашем случае вы переписываете коммит A и перебираете B и C поверх нового A, который является совершенно новым объектом. Любой, кто уже вытащил старый А в свои репозитории, может испортить свой репозиторий, так как история в вашем репозитории «волшебным образом» изменится. Их мерзавец не мог знать, что история была переписана.
Из-за этого факта разработчики Git намеренно не сделали это легким делом, так как вы должны знать о последствиях выполнения такой операции.
Хорошо, я нашел ответ. Итак, вот оно:
По сути, я пытался реализовать в Glassfish механизм аутентификации на основе openid. Один из способов сделать это - использовать ProgrammaticLogin
, но у этого есть несколько недостатков - непростой способ перенаправления обратно на запрошенный URL-адрес и программная аутентификация требуют больше работы для программиста. Итак, после прочтения я нашел лучший способ достичь своей цели - Модули аутентификации сервера или SAM. Это часть стандартного процесса, описанного в JSR-196 , и предоставляет способ создания подключаемых модулей аутентификации для Glassfish (т.е. отличных от стандартной FORM
, BASIC
] и т.д.). Этот метод позволяет вам вставлять новые модули аутентификации в контейнер сервлетов, сохраняя вашу декларативную модель безопасности.
Так что все, что мне нужно сделать, это написать свой собственный SAM. Вот краткое руководство:
Реализуйте интерфейс ServerAuthModule, который в основном сводится к следующему методу:
AuthStatus validateRequest (MessageInfo messageInfo, security.auth.Subject
clientSubject, security.auth.Subject serviceSubject) выдает исключение AuthException
Упакуйте SAM в банку и поместите ее в каталог библиотеки glassfish.
Настройте SAM для использования с вашим приложением. Это выполняется в два этапа:
Для получения дополнительной информации прочтите этот отличный учебник от Рона Монзилло.
ОБНОВЛЕНИЕ: Есть более простой и элегантный Решение этой проблемы называется AuthenticRoast . Это библиотека Java, написанная Айке Соммером, которая позволяет вам писать свои собственные подключаемые аутентификаторы.
Если аутентификация формы не работает для вас, я бы рекомендовал перейти на использование ServletFilter для аутентификации. Вы просто избавляетесь от аутентификации на основе FORM и добавляете сопоставление к фильтру для страниц, которые вы хотели защитить.