package com.cl.config; import com.cl.common.json.JacksonObjectMapper; import com.cl.interceptor.JwtTokenInterceptor; import com.cl.util.LoginAttemptService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; 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.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import java.util.ArrayList; import java.util.List; /** * 配置类,注册web层相关组件 */ @Configuration @Slf4j public class WebMvcConfiguration extends WebMvcConfigurationSupport { @Autowired private JwtTokenInterceptor jwtTokenInterceptor; /** * 注册自定义拦截器 * * @param registry */ protected void addInterceptors(InterceptorRegistry registry) { log.info("开始注册自定义拦截器..."); registry.addInterceptor(jwtTokenInterceptor) .addPathPatterns("/user/**","/data/**","/institution/**") .excludePathPatterns("/user/login","user/loginOut","/user/passwordBeforeLogin","/data/screen", "/institution/getAll/**","/data/getYearList","/data/getAssistiveDeviceTotal"); } /** * 通过knife4j生成接口文档 * @return */ @Bean public Docket docket() { ApiInfo apiInfo = new ApiInfoBuilder() .title("残联大屏项目接口文档") .version("3.0") .description("残联大屏项目接口文档") .build(); // 定义请求头参数 ParameterBuilder tokenParamBuilder = new ParameterBuilder(); tokenParamBuilder.name("token") // 参数名 .description("请求头token") // 描述 .modelRef(new ModelRef("string")) .parameterType("header") // 参数类型为请求头 .required(false) // 是否必填 .build(); List parameters = new ArrayList<>(); parameters.add(tokenParamBuilder.build()); Docket docket = new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.cl.controller")) .paths(PathSelectors.any()) .build() .globalOperationParameters(parameters) .apiInfo(apiInfo); // 全局设置请求头参数; return docket; } /** * 设置静态资源映射 * @param registry */ protected void addResourceHandlers(ResourceHandlerRegistry registry) { // For Springfox 3.x registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") .resourceChain(false); } /** * 扩展Spring MVC框架的消息转换器 * @param converters */ @Override protected void extendMessageConverters(List> converters) { log.info("扩展消息转换器"); //创建一个消息装换器对象 MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); //需要为消息转换器设置一个对象转换器,对象装换器可以将java对象序列化为json数据 converter.setObjectMapper(new JacksonObjectMapper()); //将自己的消息转换器加入到容器中 converters.add(0,converter); } /** * 登录密码错误次数校验 */ @Bean public LoginAttemptService loginAttemptService() { return new LoginAttemptService(); } }