문제

다시 한 번 나는 여기에 이음새 피험자에 대한 도움을 요청합니다.

현재 우리는 다음과 같은 인터셉터를 가지고 있습니다

@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");

둘 다 꺼진 주사

:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top