SpringBoot在项目中基本配置设置

1、新增过滤器

(1)配置

@WebFilter(filterName = "corsFilter")
public class CorsFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Auth-Token");
        chain.doFilter(request, response);
    }
}

(2)在启动类中声名,启动过滤器

@Bean
public FilterRegistrationBean indexFilterRegistration(){
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new CorsFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    return filterRegistrationBean;
}

  

2、集成Swagger

(1)新增配置

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket userApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()  // 选择那些路径和api会生成document
                .apis(RequestHandlerSelectors.basePackage("controller层地址"))
                .paths(PathSelectors.any()) // 对所有路径进行监控
                .build()
                .apiInfo(userInfo());

    }

    private ApiInfo userInfo() {
        return new ApiInfoBuilder()
                .title("测试")
                .description("测试")
                .version("1.0.0")
                .license("")
                .build();
    }

(2)在启动类上新加声名

@EnableCaching
@EnableSwagger2

3、线程池配置
@Configuration
public class ThreadPoolConfig {


  @Bean
  ThreadPoolExecutorFactoryBean executorServiceFactory() {
    ThreadPoolExecutorFactoryBean factory = new ThreadPoolExecutorFactoryBean();
    factory.setThreadNamePrefix("query");
    factory.setMaxPoolSize(100);
    factory.setCorePoolSize(20);
    factory.setQueueCapacity(10000);
    return factory;
  }

  @Primary
  @Bean
  ExecutorService executorService() throws Exception {
    return executorServiceFactory().getObject();
  }
}

4、拦截器

@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    @Autowired
    AuthControl authControl;

    public WebConfig(){
        super();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/**").addResourceLocations(
                "classpath:/static/");
        registry.addResourceHandler("swagger-ui.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //登录拦截规则:除了login,其他都拦截判断/swagger-resources/configuration/ui
        registry.addInterceptor(authControl).addPathPatterns("/**").
                excludePathPatterns("/user/login/**",
                "/user/notice/index"
                ,"/user/info/noticeDetail"
                ,"/swagger-ui.html"
                ,"/configuration/**"
                ,"/swagger-resources/**"
                ,"/v2/**"
                ,"/headLine/**"
                ,"/es/**"
                ,"/**/*.js"
                ,"/**/*.css"
                ,"/**/*.svg"
                ,"/**/*.ttf"
                ,"/**/*.woff"
                ,"/**/*.woff2"
                ,"/**/*.png"
                ,"/**/*.jpg"
                ,"/**/*.gif");
        super.addInterceptors(registry);
    }

}


@Component
public class AuthControl extends HandlerInterceptorAdapter {
@Autowired
private AdminProperties props;

@Autowired
private TokenManager tokenManager;

@Autowired
private UserService userService;

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");


if (!props.isEnableAuthControl()) {
initTestData();
return true;
}

URI uri;
try {
uri = new URI(request.getRequestURI());
} catch (URISyntaxException e) {
throw new ServletException(e);
}

try {
CheckResult result = checkAuthority(request, uri.getPath());
if (result.getResult()) {
return true;
}
unauthorized(response, result.getErrorMsg());
} catch (Exception e) {
throw new ServletException(e);
}
return false;
}

private void unauthorized(HttpServletResponse response, String msg) throws IOException {
ObjectMapper om = new ObjectMapper();
response.getWriter().write(om.writeValueAsString(ResponseUtil.error(msg ==null ? "token登录失效" : msg)));
}

private CheckResult checkAuthority(HttpServletRequest request, String path) throws NoSuchAlgorithmException, java.security.SignatureException, InvalidKeySpecException {
CheckResult checkResult = new CheckResult();
// 1.验证X-Auth-Token
String tokenStr = request.getHeader("X-Auth-Token");
if (tokenStr == null) {
return checkResult.setErrorMsg("认证失败,缺少X-Auth-Token");
}
Token token;
try {
token = tokenManager.decodeTerminalToken(tokenStr);
...
    ...
    ...
} catch (ExpiredJwtException e) {
return checkResult.setErrorMsg("认证失败,token已过期,请重新登录");
} catch (SignatureException e) {
return checkResult.setErrorMsg("认证失败,非法的token");
} catch (Exception e) {
return checkResult.setErrorMsg("执行失败");
}
return checkResult.setResult(true);
}
 

 5、redis配置

@Configuration
public class RedisConfig {

    @Autowired
    private RedisTemplate redisTemplate;

    @Bean
    public RedisTemplate redisTemplateInit(){
        //设置序列化key的实例化对象
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置序列化value的实例化对象
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());


        return redisTemplate;
    }

}

 

posted on 2018-06-19 15:56  梦三辰  阅读(303)  评论(0)    收藏  举报

导航