Как пройти аутентификацию в отношении контейнера EJB3? - PullRequest
0 голосов
/ 20 февраля 2011

Мои бизнес-классы защищены аннотациями безопасности EJB3, теперь я хотел бы вызвать эти методы из контроллера Spring, как мне это сделать?

edit Я добавлю несколькоИнформация о моей установке, я использую Tomcat для веб-контейнера и OpenEJB для встраивания EJB в Tomcat.Я не остановился ни на какой версии весны, поэтому она более или менее открыта для предложений.

edit текущая настройка работает следующим образом: у меня есть форма входа + контроллер, который помещает User pojo в SessionContext.Каждый раз, когда кто-то получает доступ к защищенной части сайта, приложение проверяет пользовательское ПО, проверяет ли оно роли, а затем показывает страницу, если оно не показывает соответствующее сообщение или перенаправляет на страницу входа.Теперь бизнес-вызовы выполняются благодаря методу вызова внутри User, который обходит вероятный контекст безопасности, который является remix этого кода, найденного в примерах безопасности openejb:

Caller managerBean = (Caller) context.lookup("ManagerBeanLocal");
managerBean.call(new Callable() {
    public Object call() throws Exception {

        Movies movies = (Movies) context.lookup("MoviesLocal");

        movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
        movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
        movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998));

        List<Movie> list = movies.getMovies();
        assertEquals("List.size()", 3, list.size());

        for (Movie movie : list) {
            movies.deleteMovie(movie);
        }

        assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
        return null;
    }
});

1 Ответ

0 голосов
/ 20 февраля 2011

Контроллер Spring (или любой другой компонент контейнера сервлета в этом отношении), с или без Spring-security, легко аутентифицируется с контейнером EJB в зависимости от того, как вы настроили контейнер сервлета.Вы должны проверить документацию вашего сервлет-контейнера о том, как настроить распространение контекста безопасности или установить уровень доверия с контейнером EJB в режиме запуска.

Пожалуйста, добавьте более подробную информацию о вашей конфигурации (контейнеры EJB и сервлета, версии,или нет, они находятся в одном месте, где происходит аутентификация и т. д.), чтобы мы могли предоставить более подробную информацию.

Редактировать 20 февраля. Распространение контекста безопасности

Предполагается, что вы получаете контекст, используя конструктор без аргументов:
InitialContext context = new InitialContext();

Вы можете быть уверены в распространении безопасности в OpenEJB.Никаких других настроек не требуется.Как только вы выполняете поиск компонента с использованием контекста, контекст безопасности (пользователь и роли) передается в контейнер EJB.

Так что вам просто нужно сосредоточиться на безопасности в tomcat.Я еще не понял, как вы настроили кота.Можете ли вы показать дополнительную конфигурацию пользователей, ролей, области и т. Д. В tomcat?

Редактировать 20 февраля. Тест на tomcat

Пожалуйста, посмотрите Как получить пользователяроли в JSP / Servlet и первый тест в JSP / Servlet, чтобы убедиться, что вы правильно получаете участника и роли пользователя.После того, как этот тест пройден, вы можете проверить аннотированный EJB-метод безопасности для проверки распространения безопасности.

...