最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中實(shí)現(xiàn)Druid前端監(jiān)控界面自動(dòng)登錄功能

 更新時(shí)間:2024年08月22日 14:42:29   作者:可能是九思吧  
這篇文章主要介紹了SpringBoot中實(shí)現(xiàn)Druid前端監(jiān)控界面自動(dòng)登錄功能,需要的朋友可以參考下

SpringBoot中實(shí)現(xiàn)Druid前端監(jiān)控界面自動(dòng)登錄

改進(jìn)版看這里 :SpringBoot中實(shí)現(xiàn)Druid前端監(jiān)控界面自動(dòng)登錄 改進(jìn)版

1、背景

最近在系統(tǒng)中集成Druid數(shù)據(jù)庫(kù)連接池,Druid自帶一個(gè)可視化監(jiān)控界面,可以查看數(shù)據(jù)源、SQL執(zhí)行詳情、慢SQL記錄等等…,但是在前端中嵌入監(jiān)控界面時(shí),還需要手動(dòng)輸入后臺(tái)配置的賬號(hào)密碼,比較不方便,在研究了幾個(gè)現(xiàn)有的方案后,都不太能較好的實(shí)現(xiàn)。

網(wǎng)上方案一:自定義HTML頁(yè)面將登錄請(qǐng)求方式改為GET,在自定義的過濾器中將賬號(hào)密碼填入,返回307臨時(shí)重定向,將攜帶的賬號(hào)密碼填入到HTML頁(yè)面,請(qǐng)求實(shí)際的Druid登錄地址,完成自動(dòng)登錄。

方案一缺點(diǎn): 使用GET請(qǐng)求明文攜帶賬號(hào)密碼存在安全隱患;而且需要自定義HTML頁(yè)面,如果是前后端分離的,比較麻煩。

2、實(shí)現(xiàn)方法

(1)項(xiàng)目中使用到的依賴版本

Druid版本1.2.23

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

Spring Boot版本為2.7.18,此文章適用于Spring Boot為2的版本,適用于Spring Security。

(2)實(shí)現(xiàn)原理

本文的方法受到方案一的啟發(fā),通過請(qǐng)求自定義的路徑,使用WebFilter過濾器,將賬號(hào)密碼填充到請(qǐng)求參數(shù)中,并轉(zhuǎn)發(fā)到Druid的登錄路徑中,實(shí)現(xiàn)自動(dòng)登錄。

這一過程完全在后端處理,不會(huì)將任何參數(shù)轉(zhuǎn)發(fā)到前端,不會(huì)產(chǎn)生賬號(hào)密碼泄露,所以在配置文件中,你可以完全使用隨機(jī)字符串作為賬號(hào)密碼。

(3)具體代碼

添加一個(gè)代理登錄路徑,必須允許POST方法,這里允許了全部的方法。

/**
 * Druid自動(dòng)登錄,這里不需要處理,主要邏輯在過濾器中
 */
@RequestMapping("/loginDruid")
public void loginDruid() {}

添加自定義的過濾器

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.util.ParameterMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * Druid前端自動(dòng)登錄過濾器
 *
 * @author jiusiz
 * @since 2024-06-28
 */
@Component
@WebFilter(filterName = "DruidAutoLoginFilter", urlPatterns = "/loginDruid")
public class DruidAutoLoginFilter implements Filter {
    @Autowired
    DruidStatProperties druidStatProperties;
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        // 只攔截自動(dòng)登錄的代理方法
        if (!request.getRequestURL().toString().contains("loginDruid")) {
            chain.doFilter(request, response);
            return;
        }
		// 獲取到參數(shù),并通過反射去添加在配置文件中的Druid賬號(hào)密碼
        Map<String, String[]> parameterMap = request.getParameterMap();
        if (parameterMap instanceof org.apache.catalina.util.ParameterMap) {
            try {
                Field field = ParameterMap.class.getDeclaredField("locked");
                field.setAccessible(true);
                field.setBoolean(parameterMap, false);
                parameterMap.put("loginUsername", new String[]{druidStatProperties.getStatViewServlet().getLoginUsername()});
                parameterMap.put("loginPassword", new String[]{druidStatProperties.getStatViewServlet().getLoginPassword()});
                field.setBoolean(parameterMap, true);
            } catch (NoSuchFieldException | IllegalAccessException e) {
                throw new RuntimeException(e);
            }
            // 轉(zhuǎn)發(fā)到實(shí)際的Druid登錄路徑上
            request.getRequestDispatcher("/druid/submitLogin").forward(request, response);
        }
        chain.doFilter(request, response);
    }
}

配置文件,部分配置,請(qǐng)按需使用

spring:
  datasource:
    druid:
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        allow:
        # 訪問路徑,按下面的填
        url-pattern: /druid/*
        # 控制臺(tái)管理用戶名和密碼,無(wú)所謂,因?yàn)閺暮蠖巳?,隨機(jī)字符串即可
        login-username: BvcLixhs
        login-password: dcqMZCWhnGZrnPhiKRYp

前端代碼

僅展示Vue3的版本,其他版本一致,需要先請(qǐng)求代理方法后,再來到Druid首頁(yè)。

<script setup>
import request from '@/utils/request'
const url = ref('')
// 必須使用POST方法,因?yàn)橐D(zhuǎn)發(fā)給Druid,Druid的登錄方法為POST
request.post('/loginDruid', {
  // 參數(shù)無(wú)所謂,但必須要有,沒有參數(shù)后端會(huì)找不到parameterMap
  ignore: 1
}).then(() => {
  url.value = import.meta.env.VITE_API_BASE_SERVER + '/druid/index.html'
})
</script>
<template>
  <div style="width: 100%;height: 100%;">
    <iframe 
      :src="url" 
      frameborder="no" 
      style="width: 100%; height: 100%" 
      scrolling="auto" />
  </div>
</template>

3、效果展示

在這里插入圖片描述

到此這篇關(guān)于SpringBoot中實(shí)現(xiàn)Druid前端監(jiān)控界面自動(dòng)登錄的文章就介紹到這了,更多相關(guān)SpringBoot自動(dòng)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot整合Excel填充數(shù)據(jù)代碼示例

    springboot整合Excel填充數(shù)據(jù)代碼示例

    這篇文章主要給大家介紹了關(guān)于springboot整合Excel填充數(shù)據(jù)的相關(guān)資料,文中通過代碼示例介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用springboot具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java 字符串截取及常見場(chǎng)景與方法詳解

    Java 字符串截取及常見場(chǎng)景與方法詳解

    在 Java 開發(fā)中,截取字符串是一個(gè)非常常見的操作,無(wú)論是獲取文件名還是提取某些特定內(nèi)容,本文詳細(xì)介紹了截取字符串最后一位及其他常見截取操作的多種方法,幫助開發(fā)者快速上手,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 基于Spring中各個(gè)jar包的作用及依賴(詳解)

    基于Spring中各個(gè)jar包的作用及依賴(詳解)

    下面小編就為大家?guī)硪黄赟pring中各個(gè)jar包的作用及依賴(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • 深入了解與實(shí)例應(yīng)用pinyin4j庫(kù)

    深入了解與實(shí)例應(yīng)用pinyin4j庫(kù)

    在Java開發(fā)中,pinyin4j庫(kù)是處理漢字與拼音轉(zhuǎn)換的重要工具,提供將漢字轉(zhuǎn)換為全拼音和提取漢字首字母的核心功能,本文詳細(xì)探討了pinyin4j庫(kù)的使用方法、核心功能和實(shí)例應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 淺析Spring IOC bean為什么默認(rèn)是單例

    淺析Spring IOC bean為什么默認(rèn)是單例

    單例的意思就是說在 Spring IoC 容器中只會(huì)存在一個(gè) bean 的實(shí)例,無(wú)論一次調(diào)用還是多次調(diào)用,始終指向的都是同一個(gè) bean 對(duì)象,本文小編將和大家一起分析Spring IOC bean為什么默認(rèn)是單例,需要的朋友可以參考下
    2023-12-12
  • Hibernate雙向多對(duì)多映射關(guān)系配置代碼實(shí)例

    Hibernate雙向多對(duì)多映射關(guān)系配置代碼實(shí)例

    這篇文章主要介紹了Hibernate雙向多對(duì)多映射關(guān)系配置代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Eclipse配置python開發(fā)環(huán)境過程圖解

    Eclipse配置python開發(fā)環(huán)境過程圖解

    這篇文章主要介紹了Eclipse配置python開發(fā)環(huán)境過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 使用Spring Boot快速構(gòu)建基于SQLite數(shù)據(jù)源的應(yīng)用

    使用Spring Boot快速構(gòu)建基于SQLite數(shù)據(jù)源的應(yīng)用

    為了提供一個(gè)單包易部署的服務(wù)器應(yīng)用,考慮使用Spring Boot,因?yàn)槠浼闪薃pache Tomcat,易于運(yùn)行,免去絕大部分了服務(wù)器配置的步驟
    2017-08-08
  • SpringBoot 返回Html界面的操作代碼

    SpringBoot 返回Html界面的操作代碼

    這篇文章主要介紹了SpringBoot 返回Html界面的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • SpringBoot使用ResponseBodyEmitter處理流式日志和進(jìn)度條

    SpringBoot使用ResponseBodyEmitter處理流式日志和進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何使用ResponseBodyEmitter處理流式日志和進(jìn)度條,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02

最新評(píng)論

五河县| 镇远县| 达孜县| 罗江县| 收藏| 凌云县| 那曲县| 香港| 本溪| 台中县| 应用必备| 莆田市| 肇庆市| 镇康县| 宁化县| 葫芦岛市| 若羌县| 睢宁县| 乌兰察布市| 灌阳县| 大余县| 中阳县| 龙江县| 大厂| 筠连县| 桑日县| 巧家县| 盐津县| 广德县| 哈密市| 湘阴县| 修文县| 南昌市| 灵武市| 西昌市| 太谷县| 兴义市| 永嘉县| 错那县| 涟水县| 平果县|