WebConfig.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package net.mingsoft.config;
  2. import java.io.File;
  3. import java.util.Arrays;
  4. import net.mingsoft.basic.filter.XSSEscapeFilter;
  5. import org.springframework.aop.Advisor;
  6. import org.springframework.aop.support.DefaultPointcutAdvisor;
  7. import org.springframework.aop.support.JdkRegexpMethodPointcut;
  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. @Bean
  30. public ActionInterceptor actionInterceptor() {
  31. return new ActionInterceptor();
  32. }
  33. @Override
  34. public void configurePathMatch(PathMatchConfigurer configurer) {
  35. // 启用.do后缀
  36. configurer.setUseRegisteredSuffixPatternMatch(true);
  37. }
  38. /**
  39. * 增加对rest api鉴权的spring mvc拦截器
  40. */
  41. @Override
  42. public void addInterceptors(InterceptorRegistry registry) {
  43. // 排除配置
  44. registry.addInterceptor(actionInterceptor()).excludePathPatterns("/static/**", "/app/**", "/webjars/**",
  45. "/*.html", "/*.htm");
  46. }
  47. @Override
  48. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  49. //jar包方式映射处理
  50. String classPath = BasicUtil.getClassPath("");
  51. if (classPath.startsWith("file")) {
  52. registry.addResourceHandler("/upload/**").addResourceLocations("file:" + BasicUtil.getRealPath("upload") + File.separator);
  53. registry.addResourceHandler("/html/**").addResourceLocations("file:" + BasicUtil.getRealPath("html") + File.separator);
  54. registry.addResourceHandler("/templets/**").addResourceLocations("file:" + BasicUtil.getRealPath("templets") + File.separator);
  55. } else {
  56. //必须做判断,不然jar运行的html路径会被覆盖掉
  57. registry.addResourceHandler("/html/**").addResourceLocations("/html/");
  58. }
  59. registry.addResourceHandler("/app/**").addResourceLocations("/app/", "classpath:/app/");
  60. registry.addResourceHandler("/static/**").addResourceLocations("/static/", "classpath:/static/");
  61. registry.addResourceHandler("/api/**").addResourceLocations("/api/", "classpath:/api/");
  62. }
  63. /**
  64. * druidServlet注册
  65. */
  66. @Bean
  67. public ServletRegistrationBean druidServletRegistration() {
  68. ServletRegistrationBean registration = new ServletRegistrationBean(new StatViewServlet());
  69. registration.addUrlMappings("/druid/*");
  70. return registration;
  71. }
  72. /**
  73. * druid监控 配置URI拦截策略
  74. */
  75. @Bean
  76. public FilterRegistrationBean druidStatFilter() {
  77. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
  78. // 添加过滤规则.
  79. filterRegistrationBean.addUrlPatterns("/*");
  80. // 添加不需要忽略的格式信息.
  81. filterRegistrationBean.addInitParameter("exclusions",
  82. "/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid,/druid/*");
  83. // 用于session监控页面的用户名显示 需要登录后主动将username注入到session里
  84. filterRegistrationBean.addInitParameter("principalSessionName", "username");
  85. return filterRegistrationBean;
  86. }
  87. /**
  88. * druid数据库连接池监控
  89. */
  90. @Bean
  91. public DruidStatInterceptor druidStatInterceptor() {
  92. return new DruidStatInterceptor();
  93. }
  94. @Bean
  95. public JdkRegexpMethodPointcut druidStatPointcut() {
  96. JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut();
  97. String patterns = "net.mingsoft.*.biz.*";
  98. // 可以set多个
  99. druidStatPointcut.setPatterns(patterns);
  100. return druidStatPointcut;
  101. }
  102. /**
  103. * druid数据库连接池监控
  104. */
  105. @Bean
  106. public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
  107. BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
  108. beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
  109. beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
  110. return beanTypeAutoProxyCreator;
  111. }
  112. /**
  113. * druid 为druidStatPointcut添加拦截
  114. *
  115. * @return
  116. */
  117. @Bean
  118. public Advisor druidStatAdvisor() {
  119. return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
  120. }
  121. // /**
  122. // * xssFilter注册
  123. // */
  124. // @Bean
  125. // public FilterRegistrationBean xssFilterRegistration() {
  126. // XSSEscapeFilter xssFilter = new XSSEscapeFilter();
  127. // FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
  128. // registration.addUrlPatterns("/*");
  129. // return registration;
  130. // }
  131. /**
  132. * RequestContextListener注册
  133. */
  134. @Bean
  135. public ServletListenerRegistrationBean<RequestContextListener> requestContextListenerRegistration() {
  136. return new ServletListenerRegistrationBean<>(new RequestContextListener());
  137. }
  138. /**
  139. * 设置默认首页
  140. */
  141. @Override
  142. public void addViewControllers(ViewControllerRegistry registry) {
  143. registry.addViewController("/").setViewName("forward:/index");
  144. registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
  145. WebMvcConfigurer.super.addViewControllers(registry);
  146. }
  147. }