WebConfig.java 5.8 KB

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