gpt4 book ai didi

java - 将 session 对象放入 Seam 拦截器中

转载 作者:行者123 更新时间:2023-12-02 08:37:15 24 4
gpt4 key购买 nike

我再次在这里寻求有关接缝主题的帮助。

目前我们有以下拦截器用于审计

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Interceptors(LoggingInterceptor.class)
public @interface IAuditavel {

}

以及拦截器本身

private EntityManager em;

@Logger
private Log logger;

@In(required = false)
Usuario usuario;

@AroundInvoke
public Object aroundInvoke(InvocationContext ctx) throws Exception {
if (ctx.getMethod().isAnnotationPresent(IAuditavel.class) || isInterceptorEnabled()) {
// Inicializa o EM fora do escopo do SEAM
em = (EntityManager) Component.getInstance("entityManager");

// Entidade para logging
LogEntidade entidade = new LogEntidade();

// Chave 0
entidade.setIdLog(new BigDecimal(0));

// Metodo chamado
entidade.setAcao( ctx.getTarget().getClass().getSimpleName() + "." + ctx.getMethod().getName() );

// Usuario logado no momento
entidade.setUsuario( usuario );

// Parametros
Object[] params = ctx.getParameters();
StringBuilder sb = new StringBuilder("");

for (Object o : params){
sb.append(o + ", ");
}

// Data da execução
entidade.setDataAlteracao(new Date());

// Salva e desconecta a entidade
em.persist(entidade);
em.flush();

// Põe os valores da entidade no log do jboss
saveToServerLog(entidade);
}

// Continua a execução do método interceptado
return ctx.proceed();
}

/***
* Retorna true caso a classe / método seja anotada com o nosso interceptor
*/
public boolean isInterceptorEnabled() {
return getComponent().beanClassHasAnnotation(IAuditavel.class);
}

public void saveToServerLog(LogEntidade entidade) {
if (logger.isInfoEnabled()) {
logger.info("> " + entidade.getDataAlteracao() + ":"
+ entidade.getAcao() + " com os parametros : "
+ entidade.getParametros());
}
}

我认为

@In(required = false)
Usuario usuario;

不起作用,因为接缝域不会进入拦截器。那么如何注入(inject)在登录方法上设置的 session 属性:

 @In(required = false)
@Out(scope = ScopeType.SESSION, required = false)
Usuario usuario;

在 validator 类上。

提前致谢。

最佳答案

答案需要是:

// Inicializa o EM fora do escopo do SEAM
em = (EntityManager) Component.getInstance("entityManager");

// Recupera o usuário logado
usuario = (Usuario) Contexts.getSessionContext().get("usuario");

均关闭注入(inject)

:)

关于java - 将 session 对象放入 Seam 拦截器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1234598/

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