如何将Spring安全登录传播到EJB?

时间:2010-05-02 09:29:23

标签: authentication jboss spring-security ejb

上下文

我有一个在JBoss 4.2.3应用服务器上运行的J2EE应用程序。可以通过Web界面访问该应用程序。身份验证通过基本身份验证完成。在EJB内部,我询问bean的安全上下文中的主体(登录用户的名称),并在允许此用户访问EJB的此方法时进行一些授权检查。 EJB处于与处理Web前端的servlet不同的生活中,因此我无法直接访问spring应用程序上下文。

必要的更改

我想切换到Spring Security来处理用户登录。

问题

如何将spring登录信息传播到JBoss安全上下文,这样我仍然可以使用我的EJB而不必重写它们?


想法和链接

我已经找到了一个关于"Propagating Identity from Spring Security to the EJB Layer"的页面,但不幸的是它引用了旧版本的Spring Security(Acegi),我对Spring Security不太熟悉,无法使用实际版本(3.0) 0.2)。

Here使用WebLogic看起来很相似。

2 个答案:

答案 0 :(得分:1)

如果正确配置spring-security(过滤器链中的过滤器,security-context.xml), 您可以使用注释@Secured来限制具有所需用户角色的用户。您可以在类级别和/或方法级别使用此批注。

如果您需要知道有关当前用户的所有授权信息,您可以使用此帮助程序(我为我的webapp写了这个,但它可能对其他人有用。MyUserDetails是一个服务bean,spring-security的{ {1}}后代。):

UserDetail

答案 1 :(得分:0)

我有同样的问题,如果有人能想出一种更好的方法将Spring Security和Java EE应用程序与EJB集成,那将会很棒。

我认为您可以使用自己的注释来注释您的类,例如@MyAnnotation(“ADMIN”)。然后创建一个interceptor来手动检查前面提到的“LoginHelper”以获取用户的权限并与方法的annotation attributes进行比较。当名称不匹配时抛出异常。