SpringBoot關(guān)閉druid的頁面和添加密碼驗(yàn)證方式
SpringBoot關(guān)閉druid的頁面和添加密碼驗(yàn)證
在生產(chǎn)環(huán)境中,需要關(guān)閉druid的頁面,以免被攻擊。
application.properties配置文件中添加參數(shù)
# Druid 數(shù)據(jù)源監(jiān)控配置 # 是否啟用StatViewServlet(監(jiān)控頁面)false為不啟動(dòng) 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黑名單 (存在共同時(shí),deny優(yōu)先于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監(jiān)控
1.引入pom依賴
<!-- druid數(shù)據(jù)庫連接池 --> <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.配置文件配置監(jiān)控的屬性
注意:如果不想要登錄頁面,配置文件中可注釋掉用戶名和密碼
########## 配置StatViewServlet(監(jiān)控頁面),用于展示Druid的統(tǒng)計(jì)信息 ########## # 啟用StatViewServlet spring.datasource.druid.stat-view-servlet.enabled=true # 訪問內(nèi)置監(jiān)控頁面的路徑,內(nèi)置監(jiān)控頁面的首頁是/druid/index.html spring.datasource.druid.stat-view-servlet.url-pattern=/druid\/* # 不允許清空統(tǒng)計(jì)數(shù)據(jù),重新計(jì)算 spring.datasource.druid.stat-view-servlet.reset-enable=false # 配置監(jiān)控頁面訪問用戶名 #spring.datasource.druid.stat-view-servlet.login-username=admin # 配置監(jiān)控頁面訪問密碼 #spring.datasource.druid.stat-view-servlet.login-password=admin # 允許訪問的地址,如果allow沒有配置或者為空,則允許所有訪問 #spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 # 拒絕訪問的地址,deny優(yōu)先于allow,如果在deny列表中,就算在allow列表中,也會(huì)被拒絕 #spring.datasource.druid.stat-view-servlet.deny= ########## 配置WebStatFilter,用于采集web關(guān)聯(lián)監(jiān)控的數(shù)據(jù) ########## # 啟動(dòng) 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統(tǒng)計(jì)功能 spring.datasource.druid.web-stat-filter.session-stat-enable=true # session的最大個(gè)數(shù),默認(rèn)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 # 配置獲取連接等待超時(shí)的時(shí)間 spring.datasource.druid.max-wait=60000 # 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 spring.datasource.druid.time-between-eviction-runs-millis=60000 # 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 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,并且指定每個(gè)連接上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 監(jiān)控,利用aop 對(duì)指定接口的執(zhí)行時(shí)間,jdbc數(shù)進(jìn)行記錄 spring.datasource.druid.aop-patterns= com.admin.controller.*,com.front.controller.*
注意:每個(gè)/*符號(hào),走做了轉(zhuǎn)譯,復(fù)制過去的話需要取消轉(zhuǎn)譯符號(hào)
3. 運(yùn)行后,訪問方法
(1)可單獨(dú)訪問整個(gè)鏈接

(2) 需要將頁面內(nèi)嵌在項(xiàng)目中:可在后臺(tái)寫一個(gè)方法,返回單獨(dú)訪問的路徑
- 后臺(tái)
@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();
// 訪問端口號(hào)
int port = request.getServerPort();
String url = "http://" + serverName + ":" + port + druidIndex;
return new ResponseInfo(url);
}
}
- 配置文件druid.index
druid.index=/druid/index.html
- 工具類
/**
* 獲得真實(shí)IP地址。在使用了反向代理時(shí),直接用HttpServletRequest.getRemoteAddr()無法獲取客戶真實(shí)的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 {
// 對(duì)于通過多個(gè)代理的情況,第一個(gè)IP為客戶端真實(shí)IP,多個(gè)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: {
//計(jì)算屬性 , 設(shè)置iframe高度為窗口高度少100px
calHeight() {
return (window.innerHeight - 100) + 'px';
}
},
methods: {
fetchSysteminfo () {
// 調(diào)用的后臺(tái)的druid方法
this.$request.fetchDatasource().then(res => {
if (res.code === 200) {
this.txtUrl = res.data
}
}).then(this.hideTableLoading).catch(this.hideTableLoading)
}
},
created () {
this.fetchSysteminfo()
}
}
</script>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解析Java中的隊(duì)列和用LinkedList集合模擬隊(duì)列的方法
這篇文章主要介紹了解析Java中的隊(duì)列和用LinkedList集合模擬隊(duì)列的方法,相關(guān)算法的實(shí)現(xiàn)也是ACM中的常見題目,需要的朋友可以參考下2015-08-08
Spring @ComponentScan注解使用案例詳細(xì)講解
@ComponentScan注解的作用可以簡述為:將項(xiàng)目中所有被@Component注解直接或者間接標(biāo)記的類---->組裝成BeanDefinition---->然后以key=beanName, value=BeanDefinition的形式存儲(chǔ),為后續(xù)生成bean對(duì)象做準(zhǔn)備2023-03-03
JavaWeb實(shí)現(xiàn)學(xué)生管理系統(tǒng)的超詳細(xì)過程
學(xué)生信息管理系統(tǒng)是針對(duì)學(xué)校人事處的大量業(yè)務(wù)處理工作而開發(fā)的管理軟件,主要用于學(xué)校學(xué)生信息管理,下面這篇文章主要給大家介紹了關(guān)于JavaWeb實(shí)現(xiàn)學(xué)生管理系統(tǒng)的超詳細(xì)過程,需要的朋友可以參考下2023-05-05
IDEA 中使用 ECJ 編譯出現(xiàn) java.lang.IllegalArgumentException的錯(cuò)誤問題
這篇文章主要介紹了IDEA 中使用 ECJ 編譯出現(xiàn) java.lang.IllegalArgumentException問題 ,本文內(nèi)容簡短給大家介紹的好,需要的朋友可以參考下2020-05-05
Java使用elasticsearch基礎(chǔ)API使用案例講解
這篇文章主要介紹了Java使用elasticsearch基礎(chǔ)API使用案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
BUUCTF-easy java WEB-INF/web.xml泄露漏洞及其利用方式
這篇文章主要介紹了BUUCTF-easy java WEB-INF/web.xml泄露漏洞及其利用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07

