【问题标题】:How to set defaultHtmlEscape to true without XML in Spring MVC?如何在 Spring MVC 中不使用 XML 将 defaultHtmlEscape 设置为 true?
【发布时间】:2016-04-20 03:54:17
【问题描述】:

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

我找不到如何通过在我的 AppConfig 中设置 defaultHtmlEscape 来防止 XSS。我发现的一切都是每个表单的配置或 XML 配置中的全局配置。

我现在的AppConfig

@EnableJpaRepositories(basePackages="org.maguss.repositories")
@EnableTransactionManagement
@EnableWebMvc
@Configuration
@ComponentScan({ "org.maguss.*" })
@Import({ SecurityConfig.class })
public class AppConfig {

    @Bean(name = "dataSource")
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");
        return driverManagerDataSource;
    }


    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    //////////////////////////
     @Bean
       public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
          LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
          em.setDataSource(dataSource());
          em.setPackagesToScan(new String[] { "org.maguss.model" });

          JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
          em.setJpaVendorAdapter(vendorAdapter);
          em.setJpaProperties(additionalProperties());

          return em;
       }


       @Bean
       public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
          JpaTransactionManager transactionManager = new JpaTransactionManager();
          transactionManager.setEntityManagerFactory(emf);

          return transactionManager;
       }

       @Bean
       public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
          return new PersistenceExceptionTranslationPostProcessor();
       }

       Properties additionalProperties() {
          Properties properties = new Properties();
          properties.setProperty("hibernate.hbm2ddl.auto", "update");
        //  properties.setProperty("hibernate.hbm2ddl.auto", "create");
          properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
          return properties;
       }
    //////////////////////////

}

【问题讨论】:

    标签: java xml spring spring-mvc


    【解决方案1】:

    今天我遇到了同样的问题,找到了两种方法来实现这一点。

    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。

    【讨论】:

      【解决方案2】:

      我猜你应该有一个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);
          }
      }
      

      【讨论】:

      • 我可以将它与我的 AppConfig 类结合起来还是另一个配置类?它不会引起任何问题吗?
      • 您使用的是web.xml吗?
      • 否,但我已尝试将配置放在那里,但它不起作用。我也将它添加到每个表单中,但由于某种原因它不起作用......
      • 我遇到了与此处所述相同的问题:forum.spring.io/forum/spring-projects/web/65447-htmlescape
      • 你有AbstractAnnotationConfigDispatcherServletInitializer吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 2019-05-20
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多