【问题标题】:How do I authenticate regarding EJB3 Container?如何对 EJB3 Container 进行身份验证?
【发布时间】:2011-02-20 23:34:22
【问题描述】:

我的业务类受 EJB3 安全注释保护,现在我想从 Spring 控制器调用这些方法,我该怎么做?

edit 我将添加一些关于我的设置的信息,我使用 Tomcat 作为 webcontainer,使用 OpenEJB 将 EJB 嵌入到 tomcat 中。我没有选择任何版本的 spring 所以它或多或少地接受建议。

edit 当前设置的工作方式如下: 我有一个登录表单+控制器,它将User pojo 放入 SessionContext 中。每次有人访问站点的安全部分时,应用程序都会检查用户 pojo,如果它在那里检查角色然后显示页面,如果它没有显示适当的消息或重定向到登录页面。现在,业务调用是通过 User 内部的调用方法进行的,该方法绕过了可能的安全上下文,该上下文是 openejb 安全示例中此代码的 remix

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;
    }
});

【问题讨论】:

    标签: java spring spring-security ejb-3.0 openejb


    【解决方案1】:

    Spring 控制器(或任何 servlet 容器组件),无论是否带有 spring-security,都可以通过 EJB 容器进行无缝身份验证,具体取决于您配置 servlet 容器的方式。您必须查看 servlet 容器的文档,了解如何配置安全上下文传播或在运行模式下与 EJB 容器建立信任级别。

    请添加您的配置的更多详细信息(EJB 和 servlet 容器、版本、它们是否位于同一位置、发生身份验证的位置等),以便我们提供更多详细信息。

    2 月 20 日编辑。安全上下文传播

    假设您使用无参数构造函数获取上下文:
    InitialContext context = new InitialContext();

    您可以确定向 OpenEJB 的安全传播。无需其他配置。一旦您使用上下文查找 bean,安全上下文(用户和角色)就会传递给 EJB 容器。

    因此,您必须只关注 tomcat 中的安全性。我还没有明白你是如何配置tomcat的。你能在tomcat中显示更多的用户、角色、领域等配置吗?

    2 月 20 日编辑。在 tomcat 上测试

    请参阅How to get user roles in a JSP / Servlet 并首先在 JSP/Servlet 中进行测试,以确保您正确获取用户主体和角色。通过此测试后,您可以测试带安全注释的 EJB 方法来验证安全传播。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2012-06-25
      相关资源
      最近更新 更多