Olá pessoal, boa tarde. Alguém poderia me ajudar com um problema utilizando o VRaptor?
O problema é o seguinte:
Meu interceptor não está captando parâmetros da request. O "request" está vindo null.
Testei mudar o escopo para Session, configurar web.xml com context-param, entre outras coisas mas nada parece fazer com que meu interceptor capture parâmetros do request.
Abaixo os códigos:
1 - index.jsp Na JSP, minha chamada ao interceptor com um teste simples, passando os parametros a serem capturados:
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>Dicionário</title>
</head>
<body>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<form name="formAutentica" method="POST" action="http://localhost:8080/dicionario">
<input type="hidden" id="dicionarioConnect" name="dicionarioConnect" value="conectar">
<input type="submit" value="Acessar">
</form>
</td>
</tr>
</table>
</body>
</html>
2 - AuthenticationInterceptor, intercepta as requisições para acesso ao sistema:
package br.com.testes.dicionario.web.interceptors;
imports...
/**
* Interceptor para autenticar o cliente para uso da aplicação.
*/
@Intercepts
@RequestScoped
public class AuthenticationInterceptor implements Interceptor {
private static final Logger LOG = Logger.getLogger(AuthenticationInterceptor.class);
private final HttpServletRequest request;
private final Result result;
@Override
public boolean accepts(ResourceMethod method) {
return true;
}
public AuthenticationInterceptor(HttpServletRequest request, Result result) {
this.request = request;
this.result = result;
}
@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) throws InterceptionException {
try {
String acesso = request.getParameter("dicionarioConnect");
if (acesso != null && !acesso.equals("") && acesso.equals("conectar")) {
HttpSession session = request.getSession(true);
session.setAttribute("acesso", acesso);
result.forwardTo(HomeController.class).index();
} else {
result.forwardTo("/erro.jsp");
}
stack.next(method, resourceInstance);
} catch (Exception e) {
LOG.error("Erro capturado, redirecionando para pagina de erro.", e);
result.forwardTo("/erro.jsp");
}
}
}
3 - web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Dicionario</display-name>
<context-param>
<param-name>br.com.caelum.vraptor.encoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
<context-param>
<param-name>br.com.caelum.vraptor.packages</param-name>
<param-value>
br.com.testes.dicionario.web.interceptors
</param-value>
</context-param>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter>
<filter-name>vraptor</filter-name>
<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>vraptor</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>sitemesh-freemarker</servlet-name>
<servlet-class>com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>auto_import</param-name>
<param-value>macros/html.ftl as html</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
</web-app>
Basicamente, após passar pela verificação de "acesso.equals("conectar")", ele deveria ser diercionado para (HomeController.class).index() mas isso não acontece?
Alguma idéia?
Obrigado a todos!
