将会话对象放入 Seam 拦截器中
我再次在这里寻求关于接缝主题的帮助。
目前我们有以下拦截器用于审计
@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;
不会工作,因为接缝域不会进入拦截器。 那么如何注入在登录方法上设置的会话属性:
@In(required = false)
@Out(scope = ScopeType.SESSION, required = false)
Usuario usuario;
在身份验证器类上。
提前致谢。
once more i'm here asking help on seam subject.
Currently we have the following interceptor for audit
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Interceptors(LoggingInterceptor.class)
public @interface IAuditavel {
}
and the interceptor itself
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());
}
}
I presume the
@In(required = false)
Usuario usuario;
won't work because seam domain don't get into the interceptor. So how do I inject a session atribute setted on the login method as:
@In(required = false)
@Out(scope = ScopeType.SESSION, required = false)
Usuario usuario;
on the authenticator class.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
答案需要是:
都关闭注入
:)
The answer need was:
both off injection
:)