WebConfig.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package net.mingsoft.config;
  2. import java.io.File;
  3. import org.springframework.aop.Advisor;
  4. import net.mingsoft.basic.filter.XSSEscapeFilter;
  5. import org.springframework.aop.support.DefaultPointcutAdvisor;
  6. import org.springframework.aop.support.JdkRegexpMethodPointcut;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  9. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  10. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  11. import org.springframework.context.annotation.Bean;
  12. import org.springframework.context.annotation.Configuration;
  13. import org.springframework.core.Ordered;
  14. import org.springframework.web.context.request.RequestContextListener;
  15. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  16. import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
  17. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  18. import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
  19. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  20. import com.alibaba.druid.pool.DruidDataSource;
  21. import com.alibaba.druid.support.http.StatViewServlet;
  22. import com.alibaba.druid.support.http.WebStatFilter;
  23. import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
  24. import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
  25. import net.mingsoft.basic.interceptor.ActionInterceptor;
  26. import net.mingsoft.basic.util.BasicUtil;
  27. @Configuration
  28. public class WebConfig implements WebMvcConfigurer {
  29. /**
  30. * 上传路径
  31. */
  32. @Value("${ms.upload.path}")
  33. private String uploadFloderPath;
  34. /**
  35. * 上传路径映射
  36. */
  37. @Value("${ms.upload.mapping}")
  38. private String uploadMapping;
  39. @Bean
  40. public ActionInterceptor actionInterceptor() {
  41. return new ActionInterceptor();
  42. }
  43. @Override
  44. public void configurePathMatch(PathMatchConfigurer configurer) {
  45. // 启用.do后缀
  46. configurer.setUseRegisteredSuffixPatternMatch(true);
  47. }
  48. /**
  49. * 增加对rest api鉴权的spring mvc拦截器
  50. */
  51. @Override
  52. public void addInterceptors(InterceptorRegistry registry) {
  53. // 排除配置
  54. registry.addInterceptor(actionInterceptor()).excludePathPatterns("/static/**", "/app/**", "/webjars/**",
  55. "/*.html", "/*.htm");
  56. }
  57. @Override
  58. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  59. //jar包方式映射处理
  60. String classPath = BasicUtil.getClassPath("");
  61. //jar包获取的路径带有file
  62. if (classPath.startsWith("file")) {
  63. //判断是否设置的绝对路径
  64. registry.addResourceHandler("/html/**").addResourceLocations("file:" + BasicUtil.getRealPath("html") + File.separator);
  65. registry.addResourceHandler("/templets/**").addResourceLocations("file:" + BasicUtil.getRealPath("templets") + File.separator);
  66. registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/");
  67. registry.addResourceHandler("/api/**").addResourceLocations("classpath:/api/");
  68. }
  69. //如果是绝对路径添加映射
  70. if(uploadFloderPath.startsWith("file:")){
  71. //如果指定了绝对路径,上传的文件都映射到uploadMapping下
  72. registry.addResourceHandler(uploadMapping).addResourceLocations(uploadFloderPath+ File.separator
  73. //映射其他路径文件
  74. //,file:F://images
  75. );
  76. }
  77. registry.addResourceHandler("/static/**").addResourceLocations("/static/","classpath:/static/");
  78. }
  79. /**
  80. * druidServlet注册
  81. */
  82. @Bean
  83. public ServletRegistrationBean druidServletRegistration() {
  84. ServletRegistrationBean registration = new ServletRegistrationBean(new StatViewServlet());
  85. registration.addUrlMappings("/druid/*");
  86. return registration;
  87. }
  88. /**
  89. * druid监控 配置URI拦截策略
  90. */
  91. @Bean
  92. public FilterRegistrationBean druidStatFilter() {
  93. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
  94. // 添加过滤规则.
  95. filterRegistrationBean.addUrlPatterns("/*");
  96. // 添加不需要忽略的格式信息.
  97. filterRegistrationBean.addInitParameter("exclusions",
  98. "/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid,/druid/*");
  99. // 用于session监控页面的用户名显示 需要登录后主动将username注入到session里
  100. filterRegistrationBean.addInitParameter("principalSessionName", "username");
  101. return filterRegistrationBean;
  102. }
  103. /**
  104. * druid数据库连接池监控
  105. */
  106. @Bean
  107. public DruidStatInterceptor druidStatInterceptor() {
  108. return new DruidStatInterceptor();
  109. }
  110. @Bean
  111. public JdkRegexpMethodPointcut druidStatPointcut() {
  112. JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut();
  113. String patterns = "net.mingsoft.*.biz.*";
  114. // 可以set多个
  115. druidStatPointcut.setPatterns(patterns);
  116. return druidStatPointcut;
  117. }
  118. /**
  119. * druid数据库连接池监控
  120. */
  121. @Bean
  122. public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
  123. BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
  124. beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
  125. beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
  126. return beanTypeAutoProxyCreator;
  127. }
  128. /**
  129. * druid 为druidStatPointcut添加拦截
  130. *
  131. * @return
  132. */
  133. @Bean
  134. public Advisor druidStatAdvisor() {
  135. return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
  136. }
  137. @Bean
  138. public FilterRegistrationBean xssFilterRegistration() {
  139. XSSEscapeFilter xssFilter = new XSSEscapeFilter();
  140. FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
  141. xssFilter.excludes.add(".*file/upload.do");
  142. xssFilter.excludes.add(".*/jsp/editor.do");
  143. registration.addUrlPatterns("/*");
  144. return registration;
  145. }
  146. /**
  147. * RequestContextListener注册
  148. */
  149. @Bean
  150. public ServletListenerRegistrationBean<RequestContextListener> requestContextListenerRegistration() {
  151. return new ServletListenerRegistrationBean<>(new RequestContextListener());
  152. }
  153. /**
  154. * 设置默认首页
  155. */
  156. @Override
  157. public void addViewControllers(ViewControllerRegistry registry) {
  158. registry.addViewController("/").setViewName("forward:/index");
  159. registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
  160. WebMvcConfigurer.super.addViewControllers(registry);
  161. }
  162. }