亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

改進版看這里 :SpringBoot中實現(xiàn)Druid前端監(jiā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ù)中,并轉發(fā)到Druid的登錄路徑中,實現(xiàn)自動登錄。

這一過程完全在后端處理,不會將任何參數(shù)轉發(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);
            }
            // 轉發(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方法,因為要轉發(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、效果展示

在這里插入圖片描述

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

相關文章

  • Java Synchronized的使用詳解

    Java Synchronized的使用詳解

    這篇文章主要介紹了Java Synchronized的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • java基本教程之常用的實現(xiàn)多線程的兩種方式 java多線程教程

    java基本教程之常用的實現(xiàn)多線程的兩種方式 java多線程教程

    下面開始學習“常用的實現(xiàn)多線程的2種方式”:Thread 和 Runnable。之所以說是常用的,是因為通過還可以通過java.util.concurrent包中的線程池來實現(xiàn)多線程
    2014-01-01
  • SpringBoot進行參數(shù)校驗的方法詳解

    SpringBoot進行參數(shù)校驗的方法詳解

    在日常的接口開發(fā)中,為了防止非法參數(shù)對業(yè)務造成影響,經(jīng)常需要對接口的參數(shù)進行校驗。本文通過示例詳細講解了SpringBoot如何進行參數(shù)校驗的,感興趣的可以學習一下
    2022-04-04
  • 解決idea爆紅 cant resolve symbol String的問題解析

    解決idea爆紅 cant resolve symbol String的問題解析

    連著出差幾個禮拜沒有使用idea開發(fā)工具,突然一天打開電腦發(fā)現(xiàn)idea里的代碼全部爆紅,懵逼不如所措,很多朋友建議我按住Alt+回車設置jdk就能解決,但是仍然報錯,經(jīng)過幾個小時的倒騰最終解決,遇到此問題的朋友參考下本文吧
    2021-06-06
  • SpringMVC使用第三方組件實現(xiàn)文件上傳

    SpringMVC使用第三方組件實現(xiàn)文件上傳

    這篇文章主要介紹了SpringMVC使用第三方組件實現(xiàn)文件上傳,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • java?SpringBoot?分布式事務的解決方案(JTA+Atomic+多數(shù)據(jù)源)

    java?SpringBoot?分布式事務的解決方案(JTA+Atomic+多數(shù)據(jù)源)

    這篇文章主要介紹了java?SpringBoot?分布式事務的解決方案(JTA+Atomic+多數(shù)據(jù)源),文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-08-08
  • Java?Redisson多策略注解限流

    Java?Redisson多策略注解限流

    這篇文章主要介紹了Java?Redisson多策略注解限流,文章使用Redisson的RRateLimiter進行限流,詳細介紹,感興趣的小伙伴可以參考下面文章內容
    2022-09-09
  • Java之SpringCloud Eurka注冊錯誤解決方案

    Java之SpringCloud Eurka注冊錯誤解決方案

    這篇文章主要介紹了Java之SpringCloud Eurka注冊錯誤解決方案,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • MyBatis3傳遞多個參數(shù)(Multiple Parameters)

    MyBatis3傳遞多個參數(shù)(Multiple Parameters)

    這篇文章主要介紹了MyBatis3傳遞多個參數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java日常練習題,每天進步一點點(30)

    Java日常練習題,每天進步一點點(30)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07

最新評論