- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
语境
我有一个在 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/
我是一名优秀的程序员,十分优秀!