[URGENTE] - Problema redirecionamento
04/08/2010 00:00
0
Pessoal,

Estou num projeto comercial, e estou travado num problema de redirecionamento do Grails, através do SecurityFilter. Tenho o seguinte trecho de código:


flash.message = "Você não tem permissão para acessar a página."
redirect(controller:"usuario",action:"list")
return false


Dessa forma, estou setando o flash.message para exibir a mensagem na próxima página, e redireciono para a action list, do controller usuario. Até aí tudo bem, acho que meu código está correto. No entanto, se a aplicação está fora do ar, e eu a inicio, e assim que a mesma passa a executar, assim que eu solicito uma página que chega nesse trecho de código, aparece o seguinte erro:


javax.servlet.ServletException: File "/WEB-INF/grails-app/views/filterConfig/index.jsp" not found

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:319)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

at java.lang.Thread.run(Thread.java:619)


Ou seja, ele parece ignorar a tentativa de ir para a action list, do usuário e passa a procurar por index.jsp, como se não houvesse nenhum redirecionamento. Observei que esse tipo de erro ocorre quando parece não possuir nenhum tipo de redirecionamento e por default, ele tenta encontrar o index. Como estamos num filter, não tem nenhum index associado a um filter, dessa forma, ele tenta procurar filterConfig/index.jsp, e obviamente ele não encontra e dá esse erro. Mas tem um pequeno detalhe: se eu vou no campo onde está definido a action, no redirecionamento, dou um espaço após a palavra list, e apago o espaço, voltando a ficar com o nome list, e salvar o arquivo do SecurityFilter.groovy, tudo isso em tempo de execução, o redirecionamento passa a funcionar perfeitamente. No entanto, se eu derrubo a aplicação, e inicio novamente, ele dá esse problema. Ao que parece o compilador está compilando errado.

Dessa forma, eu já tentei:

- Dar um clean na aplicação e reiniciá-la (no Netbeans)
- Matar a aplicação e reiniciá-la (no Netbeans)
- Ir no console, executar as mesmas operações acima

OBS: A execução não tá nem chegando à action list.

Galera, gostaria que me ajudassem com esse comportamento estranho. Alguém já passou por isso?

Abraços!
Tags: Grails


0
jguilherme, posta o código do seu filtro pra que a gente possa dar uma olhada?


0
Segue o código do SecurityFilter.groovy:


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Guilherme
*/
import carteiro_veloz.*
class SecurityFilters {
def filters = {
loginCheck(controller:'*', action:'*') { before = {

if(controllerName == null && actionName == null ){
println "controller e action null"
render(view: "index")
}else{
if(!session.usuario && actionName != "login") {
flash.message = "Você não tem permissão para acessar a página, por favor efetue o login"
redirect(uri:"/")
return false
}else if(session.usuario && actionName != "login"){
println "\n\nusuario esta logado e a action nao é login"

if(!session.usuario.admin){
println "\n\nusuario nao é administrador"
/*if(actionName == "logout"){
println 'entrou logout 1'
redirect(controller:"usuario", action:"list")
return false
}else{

}*/

println "\n\nParametros: "+params
def uri = request.forwardURI
def gruposPermissoes = null
println uri

def count = 0
def b = UsuarioGrupo.findAllByUsuario(session.usuario)
boolean error = false

/*if(!b){
flash.message = "O usuário não está vinculado a um grupo."
redirect(controller:"usuario",action:"list")
return false
}*/

b.each { i ->

error = false

if(!error && i.ativo){
count++
println "\n\nPesquisando UsuarioGrupo com grupo "+i.grupo.nome+" e usuario "+i.usuario.login

def p = Permissao.findByUrl('/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/**')

if(p == null){
println "Permissao "+'/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/**' + 'nao encontrada'


p = Permissao.findByUrl('/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/*')

if(p == null){

println "Permissao "+'/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/*' + 'nao encontrada'

p = Permissao.findByUrl(uri)

if(p == null){
println "Permissao "+uri+ ' nao encontrada'
error = true
}else{
println "Permissao encontrada 2"
gruposPermissoes = GrupoPermissao.findAllByPermissaoAndGrupo(p,i.grupo)
if(gruposPermissoes != null){
println "achou a permissao no banco de dados"
error = false
}else{
error = true
println "nao achou a permissao no banco de dados"
}
}
}else{

println "Permissao "+'/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/*' + ' encontrada'

def temp = uri
def index1 = temp.lastIndexOf("/")
def j = '/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/'
def index2 = j.lastIndexOf("/")

if(index2 != index1 ){
error = true
}else{
println "Permissao encontrada 1"
gruposPermissoes = GrupoPermissao.findAllByPermissaoAndGrupo(p,i.grupo)

if(gruposPermissoes != null){
println "achou a permissao no banco de dados"
error = false
}else{
error = true
println "nao achou a permissao no banco de dados"
}
}
}
}else{
println "\n\nPermissao encontrada 3"
println "\nProcurando permissao "+p.url+" para o grupo " +i.grupo.nome

gruposPermissoes = GrupoPermissao.findByPermissaoAndGrupo(p,i.grupo)

if(gruposPermissoes != null){
println "achou a permissao no banco de dados"
error = false
}else{
error = true
println "nao achou a permissao no banco de dados"
}
}
}
}

println "Contagem: "+count
println "GrupoPermissoes: "+gruposPermissoes
println "Error: "+error

println "Mensagem: "+flash.message

if(gruposPermissoes == null || error){
println "teste 11"
flash.message = "Você não tem permissão para acessar a página "+uri
redirect(controller:"usuario",action:"list")
return false
}else{
println controllerName + " - "+actionName
}
}
}
}

}
}
}
}
05/08/2010 00:00


0
O problema do seu filtro tá aqui:

if(controllerName == null && actionName == null ){
println "controller e action null"
render(view: "index")
}

No momento em que a aplicação é iniciada, ela sempre será redirecionada para a página index, que não está relacionada a nenhum controlador, etc.

Bom: eu não sabia disto, mas parece que o Grails (qual versão você está usando?) faz o redirecionamento para um controlador que teria o mesmo nome do seu filtro caso nada existisse.

Pode ignorar este primeiro condicional ai que vai dar certo.


0
Henrique,

Fiz o que você sugeriu, mas deu um problema:


2010-08-05 11:35:54,117 [http-8080-1] ERROR [/carteiro_veloz_grails].[default] - Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageResponseWrapper.sendError(GrailsPageResponseWrapper.java:93)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
at org.codehaus.groovy.grails.web.sitemesh.GrailsContentBufferingResponse.sendError(GrailsContentBufferingResponse.java:98)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:745)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:332)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.processFilterChain(UrlMappingsFilter.java:273)
at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:205)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.obtainContent(GrailsPageFilter.java:245)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:134)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.doFilterInternal(GrailsReloadServletFilter.java:104)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:67)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:69)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
2010-08-05 11:38:22,341 [http-8080-1] ERROR [/carteiro_veloz_grails].[default] - Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageResponseWrapper.sendError(GrailsPageResponseWrapper.java:93)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
at org.codehaus.groovy.grails.web.sitemesh.GrailsContentBufferingResponse.sendError(GrailsContentBufferingResponse.java:98)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:745)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:332)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.processFilterChain(UrlMappingsFilter.java:273)
at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:205)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.obtainContent(GrailsPageFilter.java:245)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:134)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.doFilterInternal(GrailsReloadServletFilter.java:104)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:67)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:69)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
05/08/2010 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto