Ola !
Tenho um timeout configurado na minha aplicação porem gostaria de apos esse timeout o usuário fosse redirecionado para a tela de login e não para a pagina de error.
É só no seu interceptor que verifica se ele está logado e pode acessar determinada action você redirecionar para a página de login.
Ja tinha mais ou menos em mente.
Mais tenho que criar um interception novo para isso ou posso usar o que tenho para “controlar acesso”.
[code]@Intercepts
public class PermissionInterceptor implements Interceptor {
private final Result result;
private final UsuarioWeb userSession;
public PermissionInterceptor(Result result, UsuarioWeb userSession) {
this.result = result;
this.userSession = userSession;
}
public boolean accepts(ResourceMethod method) {
return !(method.getMethod().isAnnotationPresent(Public.class) || method.getResource().getType().isAnnotationPresent(Public.class));
}
public void intercept(InterceptorStack stack, ResourceMethod method, Object resource) {
Permission methodPermission = method.getMethod().getAnnotation(Permission.class);
Permission controllerPermission = method.getResource().getType().getAnnotation(Permission.class);
if (this.hasAccess(methodPermission) && this.hasAccess(controllerPermission)) {
stack.next(method, resource);
}else {
result.forwardTo("/WEB-INF/jsp/erros/403.html");
}
}
private boolean hasAccess(Permission permission) {
if (permission == null) {
return true;
}
Collection<PerfilUsuario> perfilList = Arrays.asList(permission.value());
return perfilList.contains(userSession.getUser().getPerfil());
}
}[/code]
Tava pensando em fazer algo do tipo:[code]
if (userSession.getUser() != null){
System.out.println(“logado !”);
}else{
result.include("message", "Sessão expirada! Favor efetuar login novamente.");
result.redirectTo(UsuariosController.class).loginForm();
}[/code]
Ao invés de fazer isso: result.forwardTo("/WEB-INF/jsp/erros/403.html"); Faça o redirect para a página inicial.
So que ai da erro 500:
18/06/2012 17:55:47 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [default] in context with path [/futura] threw exception
java.lang.NullPointerException
at ws.futuranet.interceptor.PermissionInterceptor.hasAccess(PermissionInterceptor.java:63)
at ws.futuranet.interceptor.PermissionInterceptor.intercept(PermissionInterceptor.java:50)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Cara, NullPointerException é (quase) sempre erro do desenvolvedor. Debuga para descobrir o que está ficando nulo e trata esse caso.
mto provavelmente isso: userSession.getUser()
Não consegui entender lucas.
O userSession.getUser() fica nullo depois do timeout.
É por que quando faz o timeout, ele tira os objetos da sessão (setando eles com null)
Então, quando o seu userSession estiver null, é porque o usuário não está conectado.
Eu entendi que quando o userSession estiver null e pq não tem usuário. E isso vai ocorrer apos o timeout.
O que eu não entendi e como vou trata-lo sendo que depois de cada timeout ele vai esta null.
if (x != null) {
x.algumaCoisa()
}
lucas se vc ver na minha segunda resposta desse post
Ja tinha sugerido essa solução porem testei aqui e continuo com o mesmo problema
se vc testou pra nulo e ainda tá dando nullpointer vc testou no lugar errado 
tenta assim:
private boolean hasAccess(Permission permission) {
if (permission == null) {
return true;
}
if (userSession.getUser() == null) {
return false;
}
Collection<PerfilUsuario> perfilList = Arrays.asList(permission.value());
return perfilList.contains(userSession.getUser().getPerfil());
}
Era isso mesmo lucas muito obrigado !