Как переопределить j_security_check в glassfish?

То, что вы делаете, опасно, если вы делитесь веткой, в которую вносите изменения, с другими людьми. В вашем случае вы переписываете коммит A и перебираете B и C поверх нового A, который является совершенно новым объектом. Любой, кто уже вытащил старый А в свои репозитории, может испортить свой репозиторий, так как история в вашем репозитории «волшебным образом» изменится. Их мерзавец не мог знать, что история была переписана.

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

6
задан albogdano 17 March 2010 в 17:41
поделиться

2 ответа

Хорошо, я нашел ответ. Итак, вот оно:

По сути, я пытался реализовать в Glassfish механизм аутентификации на основе openid. Один из способов сделать это - использовать ProgrammaticLogin , но у этого есть несколько недостатков - непростой способ перенаправления обратно на запрошенный URL-адрес и программная аутентификация требуют больше работы для программиста. Итак, после прочтения я нашел лучший способ достичь своей цели - Модули аутентификации сервера или SAM. Это часть стандартного процесса, описанного в JSR-196 , и предоставляет способ создания подключаемых модулей аутентификации для Glassfish (т.е. отличных от стандартной FORM , BASIC ] и т.д.). Этот метод позволяет вам вставлять новые модули аутентификации в контейнер сервлетов, сохраняя вашу декларативную модель безопасности.

Так что все, что мне нужно сделать, это написать свой собственный SAM. Вот краткое руководство:

  1. Реализуйте интерфейс ServerAuthModule, который в основном сводится к следующему методу:

    AuthStatus validateRequest (MessageInfo messageInfo, security.auth.Subject clientSubject, security.auth.Subject serviceSubject) выдает исключение AuthException

  2. Упакуйте SAM в банку и поместите ее в каталог библиотеки glassfish.

  3. Настройте SAM для использования с вашим приложением. Это выполняется в два этапа:

    • Определите свой SAM как провайдер безопасности сообщений в domain.xml.
    • Свяжите SAM для использования с вашим приложением. Вы можете сделать это, определив атрибут httpservlet-security-provider в файле sun-web-app.xml вашего приложения. Установите значение атрибута равным имени, которое вы присвоили своему SAM на шаге 1.

Для получения дополнительной информации прочтите этот отличный учебник от Рона Монзилло.

ОБНОВЛЕНИЕ: Есть более простой и элегантный Решение этой проблемы называется AuthenticRoast . Это библиотека Java, написанная Айке Соммером, которая позволяет вам писать свои собственные подключаемые аутентификаторы.

8
ответ дан 10 December 2019 в 02:52
поделиться

Если аутентификация формы не работает для вас, я бы рекомендовал перейти на использование ServletFilter для аутентификации. Вы просто избавляетесь от аутентификации на основе FORM и добавляете сопоставление к фильтру для страниц, которые вы хотели защитить.

1
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: