首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >picketlink、envers和cdi注入

picketlink、envers和cdi注入
EN

Stack Overflow用户
提问于 2013-09-18 18:59:00
回答 1查看 872关注 0票数 4

我正在使用picketlink对项目中的用户进行身份验证。我还创建了一个带@produces注释的方法,这样我就可以在其他地方注入经过身份验证的用户。现在,我正在使用envers,除了默认信息之外,我还想存储执行该操作的用户,但我无法将其注入到envers侦听器中。它始终为空。如何进行此注入,或检索此信息?

生产者类:

代码语言:javascript
复制
@SessionScoped
public class Resources implements Serializable {
    private static final long serialVersionUID = 1L;

    @EJB
    private AuthenticationManagerBean authenticator;

    @Inject
    private Identity credentials;

    @CurrentUser
    private AuthenticatedUser currentUser;

    @Produces
    @CurrentUser
    @SessionScoped
    private AuthenticatedUser createAuthenticatedUser() {
        AuthenticatedUser user = new AuthenticatedUser();
        org.picketlink.idm.model.basic.User loggedInUser = (org.picketlink.idm.model.basic.User) credentials.getAccount();

        User pu = authenticator.getUserRoles(loggedInUser.getLoginName());

        if (pu != null) {
            user.setUser(pu.getName());

            for (Role role : pu.getRoles()) {
                user.getRoles().add(role.getName());
            }
        }

        return user;
    }

    @Produces
    public Logger produceLog(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
    }

和envers监听器:

代码语言:javascript
复制
public class AuditListener implements RevisionListener, Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    @CurrentUser
    private AuthenticatedUser identity; //this is always null

    public void newRevision(Object revisionEntity) {

        System.out.println(identity.getUser());
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-11-01 22:43:35

我也有类似的问题。注入无法工作,因为RevisionListener不是由CDI管理的。这样,您就必须自己查找bean。你可以这样做:

代码语言:javascript
复制
public AuthenticatedUser getAuthenticatedUser() {
    BeanManager beanManager = (BeanManager) new InitialContext().lookup("java:comp/BeanManager");
    Bean<AuthenticatedUser> bean = (Bean<AuthenticatedUser>) beanManager.getBeans(AuthenticatedUser.class, new AnnotationLiteral<CurrentUser>() {
    }).iterator().next();

    CreationalContext<AuthenticatedUser> ctx = beanManager.createCreationalContext(bean);
    return (AuthenticatedUser) beanManager.getReference(bean, AuthenticatedUser.class, ctx);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18870423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档