Как распространить пружинный вход в систему безопасности EJBs?

Контекст

У меня есть приложение J2EE, работающее на JBoss 4.2.3 сервера приложений. Приложение достижимо через веб-интерфейс. Аутентификация сделана со стандартной аутентификацией. В EJBs я спрашиваю контекст защиты боба для принципала (имя зарегистрированного пользователя) и делаю некоторые проверки авторизации, если этому пользователю разрешают получить доступ к этому методу EJB. Жизнь EJBs в другом ухе, чем сервлеты, обрабатывающие сеть frontend, таким образом, я не могу получить доступ к пружинному контексту приложения непосредственно.

Необходимое изменение

Я хочу переключиться на безопасность Spring для обработки пользовательского входа в систему.

Вопрос

Как я могу распространить пружинные данные для входа к контексту защиты JBoss, таким образом, я могу все еще использовать свой EJBs, не имея необходимость переписывать их?


Идеи и ссылки

Я уже нашел страницу, говорящую о "Распространении Идентификационных данных от безопасности Spring до Слоя EJB", но к сожалению это относится к более старой версии безопасности Spring (Acegi), и я не достаточно знаком с безопасностью Spring для создания этой работы с фактической версией (3.0.2).

Вот что-то, что смотрит подобное использование WebLogic.

6
задан Yves Martin 4 September 2012 в 15:09
поделиться

1 ответ

Если вы правильно настроили Spring-security (фильтр в цепочке фильтров, security-context.xml), вы можете использовать аннотацию @Secured, чтобы ограничить пользователей необходимыми ролями. Вы можете использовать эту аннотацию на уровне класса и / или метода.

Если вам нужно знать всю информацию об авторизации текущего пользователя, вы можете использовать этот помощник (я написал это для своего веб-приложения, но он может быть полезен для других. MyUserDetails - это служебный компонент, пружина- потомок безопасности UserDetail .):

public class LoginHelper {

    /**
     * @return user object if user is authenticated and null if is not
     */
    public static User getUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        if (authentication != null) {
            Object principal = authentication.getPrincipal();
            if (principal instanceof MyUserDetails) {
                return ((MyUserDetails) principal).getUser();
            }
        }
        return null;
    }

    /**
     * Check for authenticated user
     *
     * @return true if user is authenticated and false if is not
     */
    public static boolean isAuthenticated() {
        final User user = getUser();
        return user != null;
    }

}
1
ответ дан 17 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

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