VRaptor 3 - problema com interceptor [RESOLVIDO]

2 respostas
GouverMXT
Possuo um interceptor que verifica se o usuário está logado antes de acessar determinados resources, e se não estiver, redireciona para a página de login.
public void intercept(InterceptorStack arg0, ResourceMethod arg1, Object arg2)
            throws InterceptionException {

        if (sessionUser.getUser() == null)
            result.use(Results.logic()).redirectTo(LoginController.class).login();

        arg0.next(arg1, arg2);

    }
Mas ocorre um problema quando a uri do método da resource que está sendo interceptado possui parâmetros, por ex.:
@Get
    @Path("/gerencia/inscricao/{id}")
    public void detail(Long id) {
        try {
            ....
        } catch (Exception ex) {
            processError(ex);
        }
    }
Neste caso em vez de redirecionar para a página de login eu recebo o seguinte erro:
HTTP Status 500 -

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

br.com.caelum.vraptor.http.InvalidParameterException: unable to retrieve values to invoke method
O que pode ser?

2 Respostas

G

Penso que esse if está errado, pois se você redirecionar você não pode chamar o próximo stack. Dessa forma se o usuário tentar acessar alguma coisa, você redireciona mas mesmo assim ele executa tal ação.

if (sessionUser.getUser() == null) { result.use(Results.logic()).redirectTo(LoginController.class).login(); } else { arg0.next(arg1, arg2); }

GouverMXT

garcia-jj:
Penso que esse if está errado, pois se você redirecionar você não pode chamar o próximo stack. Dessa forma se o usuário tentar acessar alguma coisa, você redireciona mas mesmo assim ele executa tal ação.

if (sessionUser.getUser() == null) { result.use(Results.logic()).redirectTo(LoginController.class).login(); } else { arg0.next(arg1, arg2); }

Era isso mesmo. Obrigado.

Criado 9 de novembro de 2009
Ultima resposta 9 de nov. de 2009
Respostas 2
Participantes 2