Я использую picketlink для аутентификации пользователя по проекту. Я также создал @produces аннотированный метод, поэтому я мог бы ввести аутентифицированного пользователя в другие места. Теперь я использую envers и помимо информации по умолчанию, я хотел бы сохранить пользователя, выполнившего действие, но я не могу его вводить в приемник envers. Он всегда равен нулю. Как я могу сделать эту инъекцию или получить эту информацию?picketlink, envers и cdi injection
Класс производителя:
@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:
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());
}
}