SpringBoot關(guān)閉druid的頁(yè)面和添加密碼驗(yàn)證方式
SpringBoot關(guān)閉druid的頁(yè)面和添加密碼驗(yàn)證
在生產(chǎn)環(huán)境中,需要關(guān)閉druid的頁(yè)面,以免被攻擊。
application.properties配置文件中添加參數(shù)
# Druid 數(shù)據(jù)源監(jiān)控配置 # 是否啟用StatViewServlet(監(jiān)控頁(yè)面)false為不啟動(dòng) spring.datasource.druid.stat-view-servlet.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* # IP白名單(沒(méi)有配置或者為空,則允許所有訪問(wèn)) 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頁(yè)面上的“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ù)庫(kù)連接池 --> <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)控的屬性
注意:如果不想要登錄頁(yè)面,配置文件中可注釋掉用戶名和密碼
########## 配置StatViewServlet(監(jiān)控頁(yè)面),用于展示Druid的統(tǒng)計(jì)信息 ########## # 啟用StatViewServlet spring.datasource.druid.stat-view-servlet.enabled=true # 訪問(wèn)內(nèi)置監(jiān)控頁(yè)面的路徑,內(nèi)置監(jiān)控頁(yè)面的首頁(yè)是/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)控頁(yè)面訪問(wèn)用戶名 #spring.datasource.druid.stat-view-servlet.login-username=admin # 配置監(jiān)控頁(yè)面訪問(wèn)密碼 #spring.datasource.druid.stat-view-servlet.login-password=admin # 允許訪問(wèn)的地址,如果allow沒(méi)有配置或者為空,則允許所有訪問(wèn) #spring.datasource.druid.stat-view-servlet.allow=127.0.0.1 # 拒絕訪問(wèn)的地址,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 # 過(guò)濾所有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 # 開(kāi)啟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)行一次檢測(cè),檢測(cè)需要關(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 # 打開(kāi)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ù)制過(guò)去的話需要取消轉(zhuǎn)譯符號(hào)
3. 運(yùn)行后,訪問(wèn)方法
(1)可單獨(dú)訪問(wèn)整個(gè)鏈接

(2) 需要將頁(yè)面內(nèi)嵌在項(xiàng)目中:可在后臺(tái)寫一個(gè)方法,返回單獨(dú)訪問(wèn)的路徑
- 后臺(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);
// 訪問(wèn)域名 192.168.1.105
String serverName = request.getServerName();
// 訪問(wèn)端口號(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()無(wú)法獲取客戶真實(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ì)于通過(guò)多個(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使用Curator進(jìn)行ZooKeeper操作的詳細(xì)教程
Apache Curator 是一個(gè)基于 ZooKeeper 的 Java 客戶端庫(kù),它極大地簡(jiǎn)化了使用 ZooKeeper 的開(kāi)發(fā)工作,在分布式系統(tǒng)中,ZooKeeper 通常被用來(lái)作為協(xié)調(diào)服務(wù),而 Curator 則為我們提供了更簡(jiǎn)潔易用的接口,本文將介紹 Curator 的核心功能及實(shí)踐樣例,需要的朋友可以參考下2025-04-04
解決maven項(xiàng)目tomcat啟動(dòng)失敗war exploded:Error during
在SpringMVC項(xiàng)目中,使用war和warexploded兩種部署方式可能會(huì)導(dǎo)致不同的路徑問(wèn)題,從而出現(xiàn)404錯(cuò)誤,war模式將項(xiàng)目打包上傳,而warexploded模式則保持文件夾結(jié)構(gòu)上傳,開(kāi)發(fā)時(shí)建議使用warexploded模式,方便利用Update classes and resources功能自動(dòng)更新2024-10-10
使用Java反射模擬實(shí)現(xiàn)Spring的IoC容器的操作
這篇文章主要介紹了使用Java反射模擬實(shí)現(xiàn)Spring的IoC容器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java并發(fā)之傳統(tǒng)線程同步通信技術(shù)代碼詳解
這篇文章主要介紹了Java并發(fā)之傳統(tǒng)線程同步通信技術(shù)代碼詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
JDBC連接SQL?Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查的全過(guò)程
實(shí)際開(kāi)發(fā)中手動(dòng)的輸入SQL語(yǔ)句是少之又少,大多數(shù)情況下是通過(guò)編譯代碼進(jìn)行來(lái)控制自動(dòng)執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于JDBC連接SQL?Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查的相關(guān)資料,需要的朋友可以參考下2023-04-04
SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn)
本文主要介紹了SpringBoot登錄驗(yàn)證token攔截器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

