세션 객체를 이음새 인터셉터로 향합니다
-
22-07-2019 - |
문제
다시 한 번 나는 여기에 이음새 피험자에 대한 도움을 요청합니다.
현재 우리는 다음과 같은 인터셉터를 가지고 있습니다
@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;
인증 자 클래스에서.
미리 감사드립니다.
해결책
답이 필요했습니다.
// Inicializa o EM fora do escopo do SEAM
em = (EntityManager) Component.getInstance("entityManager");
// Recupera o usuário logado
usuario = (Usuario) Contexts.getSessionContext().get("usuario");
둘 다 꺼진 주사
:)
제휴하지 않습니다 StackOverflow