tan*_*ens 6 authentication jboss ejb spring-security
我有一个在JBoss 4.2.3应用服务器上运行的J2EE应用程序.可以通过Web界面访问该应用程序.身份验证通过基本身份验证完成.在EJB内部,我询问bean的安全上下文中的主体(登录用户的名称),并在允许此用户访问EJB的此方法时进行一些授权检查.EJB处于与处理Web前端的servlet不同的生活中,因此我无法直接访问spring应用程序上下文.
我想切换到Spring Security来处理用户登录.
如何将spring登录信息传播到JBoss安全上下文,这样我仍然可以使用我的EJB而不必重写它们?
我已经找到了页谈论"使用Spring Security到EJB层传播身份",但可惜的是它指的是一个旧版本的Spring Security(Acegi的)和我不熟悉不够使用Spring Security,使这项工作与实际版本(3.0.2).
这是使用WebLogic看起来类似的东西.
如果您正确配置了 spring-security(过滤器链中的过滤器,security-context.xml),您可以使用注释 @Secured 来限制具有所需用户角色的用户。您可以在类级别或/和方法级别使用此注释。
如果你需要知道当前用户的所有授权信息,你可以使用这个助手(我为我的web应用程序编写了这个,但它可能对其他应用程序有用。MyUserDetails是一个服务bean,spring-security的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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3259 次 |
| 最近记录: |