SpringBoot关闭druid的页面和添加密码验证方式

 更新时间:2024年05月27日 09:22:49   作者:捞起月亮的渔民小豪  
这篇文章主要介绍了SpringBoot关闭druid的页面和添加密码验证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringBoot关闭druid的页面和添加密码验证

在生产环境中,需要关闭druid的页面,以免被攻击。

application.properties配置文件中添加参数

# Druid 数据源监控配置
# 是否启用StatViewServlet(监控页面)false为不启动
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# IP白名单(没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.0.1
# IP黑名单 (存在共同时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=192.168.0.0
# 禁用HTML页面上的“Reset All”功能
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 登录名
spring.datasource.druid.stat-view-servlet.login-username=admin
# 登录密码
spring.datasource.druid.stat-view-servlet.login-password=admin

SpringBoot集成druid监控

1.引入pom依赖

<!-- druid数据库连接池 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.8</version>
</dependency>

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.2.8</version>
</dependency>

2.配置文件配置监控的属性

注意:如果不想要登录页面,配置文件中可注释掉用户名和密码

########## 配置StatViewServlet(监控页面),用于展示Druid的统计信息 ##########
# 启用StatViewServlet
spring.datasource.druid.stat-view-servlet.enabled=true
# 访问内置监控页面的路径,内置监控页面的首页是/druid/index.html
spring.datasource.druid.stat-view-servlet.url-pattern=/druid\/*
# 不允许清空统计数据,重新计算
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 配置监控页面访问用户名
#spring.datasource.druid.stat-view-servlet.login-username=admin
# 配置监控页面访问密码
#spring.datasource.druid.stat-view-servlet.login-password=admin
# 允许访问的地址,如果allow没有配置或者为空,则允许所有访问
#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# 拒绝访问的地址,deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝
#spring.datasource.druid.stat-view-servlet.deny=
########## 配置WebStatFilter,用于采集web关联监控的数据 ##########
# 启动 StatFilter
spring.datasource.druid.web-stat-filter.enabled=true
# 过滤所有url
spring.datasource.druid.web-stat-filter.url-pattern=\/*
# 排除一些不必要的url
spring.datasource.druid.web-stat-filter.exclusions=/druid\/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
# 开启session统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=true
# session的最大个数,默认1000
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=30000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.filters=stat,wall
# Spring 监控,利用aop 对指定接口的执行时间,jdbc数进行记录
spring.datasource.druid.aop-patterns= com.admin.controller.*,com.front.controller.*

注意:每个/*符号,走做了转译,复制过去的话需要取消转译符号

3. 运行后,访问方法

(1)可单独访问整个链接

(2) 需要将页面内嵌在项目中:可在后台写一个方法,返回单独访问的路径

  • 后台
@RestController
@RequestMapping("/druid")
public class DataSource {

    @Value("${druid.index}")
    private String druidIndex;


    @GetMapping("/druid")
    public ResponseInfo druid(HttpServletRequest request) {
        // 127.0.0.1
        String remoteAddr = RequestUtils.getRemoteAddr(request);
        // 访问域名 192.168.1.105
        String serverName = request.getServerName();
        // 访问端口号
        int port = request.getServerPort();
        String url = "http://" + serverName + ":" + port + druidIndex;
        return new ResponseInfo(url);
    }
}

  • 配置文件druid.index
 druid.index=/druid/index.html
  • 工具类
/**
 * 获得真实IP地址。在使用了反向代理时,直接用HttpServletRequest.getRemoteAddr()无法获取客户真实的IP地址。
 * 
 * @param request
 *            ServletRequest
 * @return
 */
public static String getRemoteAddr(ServletRequest request) {
	String addr = null;
	if (request instanceof HttpServletRequest) {
		HttpServletRequest hsr = (HttpServletRequest) request;
		for (String header : ADDR_HEADER) {
			if (StringUtils.isBlank(addr) || NUKNOWN.equalsIgnoreCase(addr)) {
				addr = hsr.getHeader(header);
			} else {
				break;
			}
		}
	}
	if (StringUtils.isBlank(addr) || NUKNOWN.equalsIgnoreCase(addr)) {
		addr = request.getRemoteAddr();
	} else {
		// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按','分割
		if (addr != null) {
			int i = addr.indexOf(",");
			if (i > 0) {
				addr = addr.substring(0, i);
			}
		}

	}
	return addr;
}
  • 前端
<template>
  <iframe :src="this.txtUrl" frameborder="0" width="100%" :style="{height:calHeight}" scrolling="auto"></iframe>
</template>

<script>

export default {
  name: 'datasource',
  data () {
    return {
      txtUrl: ''
    }
  },
  computed: {
      //计算属性 , 设置iframe高度为窗口高度少100px
      calHeight() {
        return (window.innerHeight - 100) + 'px';
      }
    },
  methods: {
    fetchSysteminfo () {
    // 调用的后台的druid方法
      this.$request.fetchDatasource().then(res => {
        if (res.code === 200) {
          this.txtUrl = res.data
        }
      }).then(this.hideTableLoading).catch(this.hideTableLoading)
    }
  },
  created () {
    this.fetchSysteminfo()
  }
}
</script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java使用Curator进行ZooKeeper操作的详细教程

    Java使用Curator进行ZooKeeper操作的详细教程

    Apache Curator 是一个基于 ZooKeeper 的 Java 客户端库,它极大地简化了使用 ZooKeeper 的开发工作,在分布式系统中,ZooKeeper 通常被用来作为协调服务,而 Curator 则为我们提供了更简洁易用的接口,本文将介绍 Curator 的核心功能及实践样例,需要的朋友可以参考下
    2025-04-04
  • 解决maven项目tomcat启动失败war exploded:Error during artifact deploym问题

    解决maven项目tomcat启动失败war exploded:Error during 

    在SpringMVC项目中,使用war和warexploded两种部署方式可能会导致不同的路径问题,从而出现404错误,war模式将项目打包上传,而warexploded模式则保持文件夹结构上传,开发时建议使用warexploded模式,方便利用Update classes and resources功能自动更新
    2024-10-10
  • Java适配器模式应用之电源适配器功能详解

    Java适配器模式应用之电源适配器功能详解

    这篇文章主要介绍了Java适配器模式应用之电源适配器功能,较为详细的分析了适配器模式的概念、原理及Java基于适配器模式实现电源适配器功能的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-05-05
  • Java 项目中使用递归的小结

    Java 项目中使用递归的小结

    在 Java 中,递归是指在方法的定义中调用自身的过程,递归是基于方法调用栈的原理实现的:当一个方法被调用时,会在调用栈中创建一个对应的栈帧,包含方法的参数、局部变量和返回地址等信息,这篇文章主要介绍了Java 项目中对使用递归的理解分享,需要的朋友可以参考下
    2024-07-07
  • 使用Java反射模拟实现Spring的IoC容器的操作

    使用Java反射模拟实现Spring的IoC容器的操作

    这篇文章主要介绍了使用Java反射模拟实现Spring的IoC容器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java并发之传统线程同步通信技术代码详解

    Java并发之传统线程同步通信技术代码详解

    这篇文章主要介绍了Java并发之传统线程同步通信技术代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • JDBC连接SQL Server数据库实现增删改查的全过程

    JDBC连接SQL Server数据库实现增删改查的全过程

    实际开发中手动的输入SQL语句是少之又少,大多数情况下是通过编译代码进行来控制自动执行,下面这篇文章主要给大家介绍了关于JDBC连接SQL Server数据库实现增删改查的相关资料,需要的朋友可以参考下
    2023-04-04
  • 快速排序的原理及java代码实现

    快速排序的原理及java代码实现

    网上关于快速排序的算法原理和算法实现都比较多,不过java是实现并不多,而且部分实现很难理解,和思路有点不搭调。所以整理了这篇文章。如果有不妥之处还请建议。
    2016-02-02
  • SpringBoot登录验证token拦截器的实现

    SpringBoot登录验证token拦截器的实现

    本文主要介绍了SpringBoot登录验证token拦截器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • JDK8中新增的原子性操作类LongAdder详解

    JDK8中新增的原子性操作类LongAdder详解

    这篇文章主要给大家介绍了关于JDK8中新增的原子性操作类LongAdder的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08

最新评论