Grails 3 - 操作web.xml

时间:2015-02-10 11:35:51

标签: grails web.xml grails-3.0

现在web.xml将动态生成,我需要在其顶部添加一个简单的过滤器类,而无需编写或使用插件。 我需要什么代码,我应该把它放在哪里?

或者我可以以某种方式获取grails将为web.xml生成的模板,我可以修改并覆盖它吗?

我在文档中看到了

grails.war.resources = { stagingDir, args ->
    copy(file: "grails-app/conf/custom-web.xml",
         tofile: "${stagingDir}/WEB-INF/web.xml")
}

但首先:在application.yml中使用此函数吗?

和第二:我仍然需要一个适当的web.xml模板来改变......

谢谢!

3 个答案:

答案 0 :(得分:4)

根据cfrick的建议,我试过了,(适用于grails 3)

创建过滤器,例如[Grails的项目] /src/main/java/hello/SimpleCORSFilter.java (创建'java'目录,或在[grails-project / src / main / groovy目录中创建SimpleCORSFilter.groovy]

您可以使用one of the spring guides中的示例。

package hello;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;

@Component
public class SimpleCORSFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
//        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        // I used this instead
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        chain.doFilter(req, res);
}

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}

}

然后在[grails-project] /grails-app/conf/spring/resources.groovy中添加过滤器,例如

import hello.SimpleCORSFilter

// Place your Spring DSL code here
beans = {
    myFilter(SimpleCORSFilter)
}

另外,在grails docs中,要订购过滤器:

import hello.SimpleCORSFilter
import org.springframework.boot.context.embedded.FilterRegistrationBean
import org.springframework.core.Ordered

myFilter(FilterRegistrationBean) {
    filter = bean(SimpleCORSFilter)
    urlPatterns = ['/*']
    order = Ordered.HIGHEST_PRECEDENCE
}

答案 1 :(得分:0)

我知道这不是实际问题的答案,但添加过滤器“springboot”样式只是为它提供@Bean。例如。你可以把它放在grails-app/conf/spring/resources.groovy中。有关详细信息,请访问:How to add a filter class in Spring Boot?

Grails 3包含了Springboot,随之而来的是基于XML的配置(不是说它是被禁止的,但是它的气馁)

答案 2 :(得分:-3)

你可以使用install-templates命令,它将模板复制到src / templates目录,你会在war目录下找到web.xml模板,你可以自定义它

请参阅http://www.grails.org/doc/latest/ref/Command%20Line/install-templates.html