如何在Spring MVC中将defaultHtmlEscape设置为true而不使用XML?

时间:2016-01-14 17:34:41

标签: java xml spring spring-mvc

我想避免使用XML配置,因此我创建了compileElement类,其中有大量bean用于不同目的。

我无法通过在AppConfig内设置defaultHtmlEscape来了解如何阻止XSS。我找到的所有内容都是每个表单的配置或XML配置中的全局配置。

我的AppConfig现在:

AppConfig

2 个答案:

答案 0 :(得分:1)

我猜你应该有一个AbstractAnnotationConfigDispatcherServletInitializer而不是传统的web.xml,基于你可以:

public class YourServletInititializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    // root config, web config and servlet mapping

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("defaultHtmlEscape", "true")

        super.onStartup(servletContext);
    }
}

答案 1 :(得分:0)

今天我遇到了一个相同的问题,并找到了两种方法来实现这一目标。

1。将条目添加到application.properties文件

您可以将以下条目添加到application.properties文件中:

server.servlet.context-parameters.defaultHtmlEscape=true

2。创建一个WebServerFactoryCustomizer bean

或者,您可以创建一个WebServerFactoryCustomizer bean来应用定制:

import java.util.Map;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.util.WebUtils;

@Component
public class WebServerCustomisations 
    implements WebServerFactoryCustomizer<AbstractServletWebServerFactory>
{
    @Override
    public void customize(AbstractServletWebServerFactory factory)
    {
         Map<String, String> initParams = factory.getInitParameters();             
         initParams.put(WebUtils.HTML_ESCAPE_CONTEXT_PARAM, Boolean.toString(true));
    }
}

请注意,此方法仅适用于工厂从AbstractServletWebServerFactory派生的Web服务器。目前看来,这是Tomcat,Jetty和Undertow。