2011-11-16 46 views
0

我的常规应用程序的web.xml正确的顺序有一定的过滤器,filtermappings,servlet映射,在下面的确切顺序定义监听器:现在的在web.xml中过滤器Grails应用

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"> 
    <display-name>/gra-production-0.1</display-name> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml 
        /WEB-INF/security-app-context.xml 
       </param-value> 
    </context-param> 
    <context-param> 
     <param-name>webAppRootKey</param-name> 
     <param-value>myapp-production-0.1</param-value> 
    </context-param> 

    <filter> 
     <filter-name>sitemesh</filter-name> 
     <filter-class>org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter</filter-class> 
    </filter> 

    <filter> 
     <filter-name>urlMapping</filter-name> 
     <filter-class>org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter</filter-class> 
    </filter> 
    <filter> 
     <filter-name>hiddenHttpMethod</filter-name> 
     <filter-class>org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter</filter-class> 
    </filter> 
    <filter> 
     <filter-name>grailsWebRequest</filter-name> 
     <filter-class>org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter</filter-class> 
    </filter> 
    <filter> 
      <filter-name>charEncodingFilter</filter-name> 
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
      <init-param> 
       <param-name>targetBeanName</param-name> 
       <param-value>characterEncodingFilter</param-value> 
      </init-param> 
      <init-param> 
       <param-name>targetFilterLifecycle</param-name> 
       <param-value>true</param-value> 
      </init-param> 
    </filter> 
    <filter> 
      <filter-name>springSecurityFilterChain</filter-name> 
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
      <filter-name>springSecurityFilterChain</filter-name> 
      <url-pattern>/*</url-pattern> 
      <dispatcher>ERROR</dispatcher> 
      <dispatcher>FORWARD</dispatcher> 
      <dispatcher>REQUEST</dispatcher> 
    </filter-mapping> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>charEncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>hiddenHttpMethod</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>REQUEST</dispatcher> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>grailsWebRequest</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>REQUEST</dispatcher> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>sitemesh</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>urlMapping</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>REQUEST</dispatcher> 
    </filter-mapping> 
    <listener> 
     <listener-class>org.codehaus.groovy.grails.web.util.Log4jConfigListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>grails</servlet-name> 
     <servlet-class>org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet> 
     <servlet-name>gsp</servlet-name> 
     <servlet-class>org.codehaus.groovy.grails.web.pages.GroovyPagesServlet</servlet-class> 
    </servlet> 
    <servlet> 
     <servlet-name>grails-errorhandler</servlet-name> 
     <servlet-class>org.codehaus.groovy.grails.web.servlet.ErrorHandlingServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>gsp</servlet-name> 
     <url-pattern>*.gsp</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>grails-errorhandler</servlet-name> 
     <url-pattern>/grails-errorhandler</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>grails</servlet-name> 
     <url-pattern>*.dispatch</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout>120</session-timeout> 
    </session-config> 
    <listener> 
     <listener-class> 
      org.springframework.web.context.request.RequestContextListener 
     </listener-class> 
     </listener> 

</web-app> 

服务器启动正常,但当我打我的应用程序URL,我得到一个Grails运行时异常如下:

java.lang.ClassCastException: org.springframework.web.context.request.ServletRequestAttributes cannot be cast to org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest 

    at org.codehaus.groovy.grails.web.util.WebUtils.retrieveGrailsWebRequest(WebUtils.java:497) 

我想用的过滤器的加载顺序的问题,并过滤mappings..not知道什么是正确的顺序应该是?

回答

0

尝试升级到插件的v1.2.5。它正确地命令过滤器映射元素(资源插件有一个问题,它也有严格的元素排序规则)。

看起来很奇怪的一件事是'springSecurityFilterChain'过滤器映射后有两个</filter-mapping>结束标签。这个文件是否被编辑?

+0

谢谢伯特..是的,我有springsecurityfilterchain 2定义,有一个评论,但不完整地删除它发布在这里...,我将升级插件,并再次尝试,但我只有一个相关的问题,使用弹簧安全与Grails。我知道我们可以使用grails插件或xml配置来配置spring安全性。我认为其中一个是Grails特定的,另一个是旧式的方法,我们可以在同一个应用程序中执行这两个操作吗? –

+0

不,我使用与传统Spring Security不同的方法,特别是使用bean名称。要弄清楚如何让他们一起工作会花费很多工作量,而使用XML的传统Spring Security并不是那么有用,所以最好只选择一个。 –