现在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模板来改变......
谢谢!
答案 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