Olá pessoal!
Minha aplicação estava funcionando até eu criar o recurso de login de usuário seguindo a apostila da Caelum, acontece que eu tenho uma página principal index.jsp que não está sendo mais chamada como antes, este é o erro ao rodar a aplicação:
HTTP STATUS 500
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
br.com.caelum.vraptor.http.route.RouteNotFoundException: The selected route is invalid for redirection: br.com.bruno.jmovie.controller.LoginController.loginUsuario
br.com.caelum.vraptor.http.route.DefaultRouter.urlFor(DefaultRouter.java:155)
br.com.caelum.vraptor.view.DefaultLogicResult$2.intercept(DefaultLogicResult.java:106)
br.com.caelum.vraptor.proxy.AbstractCglibProxifier$2.intercept(AbstractCglibProxifier.java:38)
br.com.bruno.jmovie.controller.LoginController$$EnhancerByCGLIB$$34f09898.loginUsuario(<generated>)
br.com.bruno.jmovie.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:32)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
Esta é a minha classe LoginController:
@Controller
public class LoginController {
private UsuarioDAO usuarioDao;
private UsuarioLogado usuarioLogado;
private Result result;
public LoginController(UsuarioDAO usuarioDao, UsuarioLogado usuarioLogado, Result result){
this.usuarioDao = usuarioDao;
this.usuarioLogado = usuarioLogado;
this.result = result;
}
public void autentica(Usuario usuario) {
Usuario autenticado = usuarioDao.buscaUsuarioPorLoginESenha(usuario);
if(autenticado != null) {
usuarioLogado.efetuaLogin(autenticado);
result.use(Results.logic()).redirectTo(FilmeController.class).lista();
return;
}
result.use(Results.logic()).redirectTo(LoginController.class).loginUsuario();
}
public void loginUsuario() {
}
}
Minha classe LoginInterceptor:
@Intercepts
public class LoginInterceptor implements Interceptor {
private UsuarioLogado usuarioLogado;
private Result result;
public LoginInterceptor(UsuarioLogado usuarioLogado, Result result) {
this.usuarioLogado = usuarioLogado;
this.result = result;
}
public void intercept(InterceptorStack stack, ResourceMethod method, Object instance)
throws InterceptionException {
if(usuarioLogado.getUsuario() != null) {
stack.next(method, instance);
} else {
result.use(Results.logic()).redirectTo(LoginController.class).loginUsuario();
}
}
public boolean accepts(ResourceMethod method) {
ResourceClass resource = method.getResource();
return !resource.getType().isAssignableFrom(LoginController.class);
}
}
Meu UsuarioDAO:
@Component
@RequestScoped
public class UsuarioDAO {
private Session session;
public UsuarioDAO() {
this.session = new HibernateUtil().getSession();
}
public void adiciona(Usuario usuario) {
Transaction tx = session.beginTransaction();
session.save(usuario);
tx.commit();
}
public Usuario buscaUsuarioPorLoginESenha(Usuario usuario) {
Query query = this.session.
createQuery("from Usuario where login = :pLogin and senha = :pSenha");
query.setParameter("pLogin", usuario.getLogin());
query.setParameter("pSenha", usuario.getSenha());
return (Usuario) query.uniqueResult();
}
}
Minha classe UsuarioLogado:
@Component
@SessionScoped
public class UsuarioLogado {
private Usuario usuarioLogado;
public void efetuaLogin(Usuario usuario) {
this.usuarioLogado = usuario;
}
public Usuario getUsuario() {
return this.usuarioLogado;
}
}
Já criei a tabela Usuario no banco sem inserir nenhum usuário, o que eu queria é abrir a aplicação na página Index.jsp e somente quando clicar no link “Login” no menú, que fosse redirecionado para o LoginUsuario.jsp e ai sim que funcionasse o recurso de Login com autenticação.
Grato pela atenção!
Abraço!