gpt4 book ai didi

authentication - 如何将 spring 安全登录传播到 EJB?

转载 作者:行者123 更新时间:2023-12-04 04:29:39 25 4
gpt4 key购买 nike

语境

我有一个在 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.2) 中使用。

Here是使用 WebLogic 看起来类似的东西。

最佳答案

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

如果你需要知道当前用户的所有授权信息,你可以使用这个助手(我为我的 webapp 写了这个,但它可能对其他人有用。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;
}

}

关于authentication - 如何将 spring 安全登录传播到 EJB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com