mirror of https://gitee.com/stylefeng/guns
修改配置并将druid配置放到bean里
parent
8893b0fb0d
commit
37658803c8
|
@ -1,8 +1,18 @@
|
||||||
package cn.stylefeng.guns.config.web;
|
package cn.stylefeng.guns.config.web;
|
||||||
|
|
||||||
|
import com.alibaba.druid.filter.stat.StatFilter;
|
||||||
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
|
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
|
||||||
|
import com.alibaba.druid.support.http.StatViewServlet;
|
||||||
|
import com.alibaba.druid.support.http.WebStatFilter;
|
||||||
|
import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
|
||||||
|
import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
|
||||||
import com.alibaba.druid.util.Utils;
|
import com.alibaba.druid.util.Utils;
|
||||||
|
import org.springframework.aop.Advisor;
|
||||||
|
import org.springframework.aop.support.DefaultPointcutAdvisor;
|
||||||
|
import org.springframework.aop.support.JdkRegexpMethodPointcut;
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||||
|
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@ -13,22 +23,102 @@ import javax.servlet.ServletRequest;
|
||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/***
|
/**
|
||||||
* 功能描述: <br/> Druid配置
|
* Druid配置
|
||||||
* 创建时间: 2021/1/5 15:14
|
*
|
||||||
* @author chenli
|
* @author fengshuonan
|
||||||
|
* @date 2020/4/11 10:23
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
public class DruidConfiguration {
|
public class DruidConfiguration {
|
||||||
|
|
||||||
/***
|
/**
|
||||||
* 功能描述: <br/> 去除监控页面广告
|
* druidServlet注册
|
||||||
* 创建时间: 2021/1/4 20:57
|
*/
|
||||||
|
@Bean
|
||||||
|
public ServletRegistrationBean druidServletRegistration() {
|
||||||
|
ServletRegistrationBean registration = new ServletRegistrationBean(new StatViewServlet());
|
||||||
|
registration.addUrlMappings("/druid/*");
|
||||||
|
return registration;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* druid监控 配置URI拦截策略
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public FilterRegistrationBean druidStatFilter() {
|
||||||
|
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
|
||||||
|
//添加过滤规则.
|
||||||
|
filterRegistrationBean.addUrlPatterns("/*");
|
||||||
|
//添加不需要忽略的格式信息.
|
||||||
|
filterRegistrationBean.addInitParameter(
|
||||||
|
"exclusions", "/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid,/druid/*");
|
||||||
|
//用于session监控页面的用户名显示 需要登录后主动将username注入到session里
|
||||||
|
filterRegistrationBean.addInitParameter("principalSessionName", "username");
|
||||||
|
filterRegistrationBean.addInitParameter("profileEnable", "true");
|
||||||
|
return filterRegistrationBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* druid数据库连接池监控
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public DruidStatInterceptor druidStatInterceptor() {
|
||||||
|
return new DruidStatInterceptor();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* druid慢sql监控
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public StatFilter druidSlowSQL(){
|
||||||
|
StatFilter statFilter = new StatFilter();
|
||||||
|
statFilter.setLogSlowSql(true);
|
||||||
|
statFilter.setMergeSql(true);
|
||||||
|
statFilter.setSlowSqlMillis(1000);
|
||||||
|
return statFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public JdkRegexpMethodPointcut druidStatPointcut() {
|
||||||
|
JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut();
|
||||||
|
String patterns = "cn.stylefeng.guns.modular.*.service.*";
|
||||||
|
//可以set多个
|
||||||
|
druidStatPointcut.setPatterns(patterns);
|
||||||
|
return druidStatPointcut;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* druid数据库连接池监控
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
|
||||||
|
BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
|
||||||
|
beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
|
||||||
|
beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
|
||||||
|
return beanTypeAutoProxyCreator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* druid 为druidStatPointcut添加拦截
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Bean
|
||||||
|
public Advisor druidStatAdvisor() {
|
||||||
|
return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 去除监控页面广告
|
||||||
|
*
|
||||||
* @author chenli
|
* @author chenli
|
||||||
|
* @Date 2021/1/4 20:57
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||||
@Bean
|
@Bean
|
||||||
// @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")
|
|
||||||
public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) {
|
public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) {
|
||||||
// 获取web监控页面的参数
|
// 获取web监控页面的参数
|
||||||
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
|
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package cn.stylefeng.guns.core.util;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ip工具类
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @Date 2018/9/27 上午10:47
|
||||||
|
*/
|
||||||
|
public class IpInfoUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取客户端IP地址
|
||||||
|
*/
|
||||||
|
public static String getIpAddr(HttpServletRequest request) {
|
||||||
|
String ip = request.getHeader("x-forwarded-for");
|
||||||
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||||
|
ip = request.getHeader("Proxy-Client-IP");
|
||||||
|
}
|
||||||
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||||
|
ip = request.getHeader("WL-Proxy-Client-IP");
|
||||||
|
}
|
||||||
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||||
|
ip = request.getRemoteAddr();
|
||||||
|
if (ip.equals("127.0.0.1")) {
|
||||||
|
//根据网卡取本机配置的IP
|
||||||
|
InetAddress inet = null;
|
||||||
|
try {
|
||||||
|
inet = InetAddress.getLocalHost();
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
ip = inet.getHostAddress();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
|
||||||
|
if (ip != null && ip.length() > 15) {
|
||||||
|
if (ip.indexOf(",") > 0) {
|
||||||
|
ip = ip.substring(0, ip.indexOf(","));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("0:0:0:0:0:0:0:1".equals(ip)) {
|
||||||
|
ip = "127.0.0.1";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取客户端主机名称
|
||||||
|
*/
|
||||||
|
public static String getHostName() {
|
||||||
|
try {
|
||||||
|
return InetAddress.getLocalHost().getHostName();
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
}
|
||||||
|
return "未知";
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,8 +9,10 @@ import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 项目监控
|
||||||
|
*
|
||||||
* @author chenli
|
* @author chenli
|
||||||
* @date 2020/12/30 16:40
|
* @Date 2020/12/30 16:40
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@ -36,10 +38,11 @@ public class MonitorController {
|
||||||
return PREFIX+"/systemInfo.html";
|
return PREFIX+"/systemInfo.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
/***
|
/**
|
||||||
* 功能描述: <br/> durid sql监控页面
|
* durid sql监控页面
|
||||||
* 创建时间: 2021/1/4 16:32
|
*
|
||||||
* @author chenli
|
* @author chenli
|
||||||
|
* @Date 2021/1/4 16:32
|
||||||
*/
|
*/
|
||||||
@GetResource(name = "SQL监控", path = "/monitor/druid", requiredPermission = false,requiredLogin = false)
|
@GetResource(name = "SQL监控", path = "/monitor/druid", requiredPermission = false,requiredLogin = false)
|
||||||
public String duridInfo(Model model){
|
public String duridInfo(Model model){
|
||||||
|
|
|
@ -2,8 +2,8 @@ package cn.stylefeng.guns.modular.system.warpper;
|
||||||
|
|
||||||
import cn.hutool.core.net.NetUtil;
|
import cn.hutool.core.net.NetUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.stylefeng.guns.modular.system.model.*;
|
|
||||||
import cn.stylefeng.guns.core.util.IpInfoUtils;
|
import cn.stylefeng.guns.core.util.IpInfoUtils;
|
||||||
|
import cn.stylefeng.guns.modular.system.model.*;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import oshi.SystemInfo;
|
import oshi.SystemInfo;
|
||||||
import oshi.hardware.CentralProcessor;
|
import oshi.hardware.CentralProcessor;
|
||||||
|
|
|
@ -22,23 +22,3 @@ spring:
|
||||||
testOnBorrow: false
|
testOnBorrow: false
|
||||||
testOnReturn: false
|
testOnReturn: false
|
||||||
poolPreparedStatements: false
|
poolPreparedStatements: false
|
||||||
webStatFilter:
|
|
||||||
enabled: true
|
|
||||||
statViewServlet:
|
|
||||||
enabled: true
|
|
||||||
# 设置白名单,不填则允许所有访问
|
|
||||||
allow:
|
|
||||||
url-pattern: /druid/*
|
|
||||||
# 控制台管理用户名和密码
|
|
||||||
login-username:
|
|
||||||
login-password:
|
|
||||||
filter:
|
|
||||||
stat:
|
|
||||||
enabled: true
|
|
||||||
# 慢SQL记录
|
|
||||||
log-slow-sql: true
|
|
||||||
slow-sql-millis: 1000
|
|
||||||
merge-sql: true
|
|
||||||
wall:
|
|
||||||
config:
|
|
||||||
multi-statement-allow: true
|
|
|
@ -22,23 +22,3 @@ spring:
|
||||||
testOnBorrow: false
|
testOnBorrow: false
|
||||||
testOnReturn: false
|
testOnReturn: false
|
||||||
poolPreparedStatements: false
|
poolPreparedStatements: false
|
||||||
webStatFilter:
|
|
||||||
enabled: true
|
|
||||||
statViewServlet:
|
|
||||||
enabled: true
|
|
||||||
# 设置白名单,不填则允许所有访问
|
|
||||||
allow:
|
|
||||||
url-pattern: /druid/*
|
|
||||||
# 控制台管理用户名和密码
|
|
||||||
login-username:
|
|
||||||
login-password:
|
|
||||||
filter:
|
|
||||||
stat:
|
|
||||||
enabled: true
|
|
||||||
# 慢SQL记录
|
|
||||||
log-slow-sql: true
|
|
||||||
slow-sql-millis: 1000
|
|
||||||
merge-sql: true
|
|
||||||
wall:
|
|
||||||
config:
|
|
||||||
multi-statement-allow: true
|
|
Loading…
Reference in New Issue