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

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

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

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

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

1、背景

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

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

方案一缺點: 使用GET請求明文攜帶賬號密碼存在安全隱患;而且需要自定義HTML頁面,如果是前后端分離的,比較麻煩。

2、實現(xiàn)方法

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

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)實現(xiàn)原理

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

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

(3)具體代碼

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

/**
 * Druid自動登錄,這里不需要處理,主要邏輯在過濾器中
 */
@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前端自動登錄過濾器
 *
 * @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;
        // 只攔截自動登錄的代理方法
        if (!request.getRequestURL().toString().contains("loginDruid")) {
            chain.doFilter(request, response);
            return;
        }
		// 獲取到參數(shù),并通過反射去添加在配置文件中的Druid賬號密碼
        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ā)到實際的Druid登錄路徑上
            request.getRequestDispatcher("/druid/submitLogin").forward(request, response);
        }
        chain.doFilter(request, response);
    }
}

配置文件,部分配置,請按需使用

spring:
  datasource:
    druid:
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        allow:
        # 訪問路徑,按下面的填
        url-pattern: /druid/*
        # 控制臺管理用戶名和密碼,無所謂,因為從后端取,隨機字符串即可
        login-username: BvcLixhs
        login-password: dcqMZCWhnGZrnPhiKRYp

前端代碼

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

<script setup>
import request from '@/utils/request'
const url = ref('')
// 必須使用POST方法,因為要轉(zhuǎn)發(fā)給Druid,Druid的登錄方法為POST
request.post('/loginDruid', {
  // 參數(shù)無所謂,但必須要有,沒有參數(shù)后端會找不到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中實現(xiàn)Druid前端監(jiān)控界面自動登錄的文章就介紹到這了,更多相關(guān)SpringBoot自動登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    Java 字符串截取及常見場景與方法詳解

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

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

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

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

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

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

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

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

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

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

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

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

    為了提供一個單包易部署的服務(wù)器應(yīng)用,考慮使用Spring Boot,因為其集成了Apache Tomcat,易于運行,免去絕大部分了服務(wù)器配置的步驟
    2017-08-08
  • SpringBoot 返回Html界面的操作代碼

    SpringBoot 返回Html界面的操作代碼

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

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

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

最新評論

临沂市| 杭锦旗| 建平县| 翁牛特旗| 蒙自县| 肇州县| 云和县| 翁源县| 南阳市| 古田县| 平和县| 鄱阳县| 宁都县| 定远县| 台南县| 遵化市| 咸宁市| 通化市| 辛集市| 龙州县| 绥芬河市| 苗栗市| 桂东县| 山阴县| 牟定县| 淮北市| 开阳县| 孝感市| 察隅县| 洮南市| 洱源县| 锡林浩特市| 江孜县| 惠州市| 泸定县| 玉龙| 遂溪县| 兰州市| 浦东新区| 彭山县| 江北区|