Java tutorial
package cn.zhangxd.platform.common.web.config; import ch.qos.logback.access.servlet.TeeFilter; import cn.zhangxd.platform.common.web.interceptor.LicenseInterceptor; import cn.zhangxd.platform.common.web.mapper.JsonMapper; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.catalina.filters.RemoteIpFilter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; import org.springframework.web.servlet.config.annotation.*; /** * WEB? * * @author zhangxd */ @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LicenseInterceptor()).addPathPatterns("/auth/token"); } /** * Remote ip filter remote ip filter. * * @return the remote ip filter */ @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } /** * Tee filter tee filter. * * @return the tee filter */ @Bean @ConditionalOnProperty(prefix = "server.tomcat.accesslog", name = "debug", havingValue = "true") public TeeFilter teeFilter() { //???? return new TeeFilter(); } /** * Object mapper object mapper. * * @return the object mapper */ @Bean public ObjectMapper objectMapper() { return new JsonMapper(); } /** * Http message converter http message converter. * * @return the http message converter */ @Bean public HttpMessageConverter httpMessageConverter() { return new MappingJackson2HttpMessageConverter(this.objectMapper()); } @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseSuffixPatternMatch(false) // URL ?? .* ? .setUseTrailingSlashMatch(true); // ? URL ??? / } @Override public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { // <mvc:default-servlet-handler />, ???, mapping Controller path default servlet handler ? configurer.enable(); } /** * Validator local validator factory bean. * * @return the local validator factory bean */ @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } /** * Gets method validation post processor. * * @return the method validation post processor */ @Bean public MethodValidationPostProcessor getMethodValidationPostProcessor() { MethodValidationPostProcessor processor = new MethodValidationPostProcessor(); processor.setValidator(validator()); return processor; } /** * Container customizer embedded servlet container customizer. * * @return the embedded servlet container customizer */ @Bean @ConditionalOnProperty(prefix = "server.tomcat.accesslog", name = "debug", havingValue = "true") public EmbeddedServletContainerCustomizer containerCustomizer() { return new ContainerAccessLogCustomizer("logback-access.xml"); } @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedHeaders("*").allowedMethods("*").allowedOrigins("*"); } }