Druid 开启权限校验

使用Druid连接池实现用户的登录 使用Druid连接池实现用户登录: 工程结构: dao:UserDao package cn.itcast.dao; import cn.itcast.domain.User; import cn.itcast.util.JDBCUtils; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.BeanPropertyRowMapper; i... 阅读详情

Github: https://github.com/alibaba/druid


Druid 的验证方式官网提供了一种根据ip来做访问限制的方式,即allow和deny, 详询 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE


还有一种方式,即用户名和密码,但是此方法官网没有提及,这个方式也是我看了源码后才知道的,现在分享给大家

首先从web.xml中的servlet出发

 <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
 </servlet>
打开源码StatViewServlet,  
public class StatViewServlet extends ResourceSerlvet {
   // ....
}
在跟进源码 ResourceSerlvet


然后在看service方法,这里是处理请求的

 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String contextPath = request.getContextPath();
        String servletPath = request.getServletPath();
        String requestURI = request.getRequestURI();

        response.setCharacterEncoding("utf-8");

        if (contextPath == null) { // root context
            contextPath = "";
        }
        String uri = contextPath + servletPath;
        String path = requestURI.substring(contextPath.length() + servletPath.length());

        if (!isPermittedRequest(request)) {
            path = "/nopermit.html";
            returnResourceFile(path, uri, response);
            return;
        }

        if ("/submitLogin".equals(path)) {
            String usernameParam = request.getParameter(PARAM_NAME_USERNAME);
            String passwordParam = request.getParameter(PARAM_NAME_PASSWORD);
            if (username.equals(usernameParam) && password.equals(passwordParam)) {
                request.getSession().setAttribute(SESSION_USER_KEY, username);
                response.getWriter().print("success");
            } else {
                response.getWriter().print("error");
            }
            return;
        }

        if (isRequireAuth() //
            && !ContainsUser(request)//
            && !("/login.html".equals(path) //
                 || path.startsWith("/css")//
                 || path.startsWith("/js") //
            || path.startsWith("/img"))) {
            if (contextPath == null || contextPath.equals("") || contextPath.equals("/")) {
                response.sendRedirect("/druid/login.html");
            } else {
                if ("".equals(path)) {
                    response.sendRedirect("druid/login.html");
                } else {
                    response.sendRedirect("login.html");
                }
            }
            return;
        }

        if ("".equals(path)) {
            if (contextPath == null || contextPath.equals("") || contextPath.equals("/")) {
                response.sendRedirect("/druid/index.html");
            } else {
                response.sendRedirect("druid/index.html");
            }
            return;
        }

        if ("/".equals(path)) {
            response.sendRedirect("index.html");
            return;
        }

        if (path.indexOf(".json") >= 0) {
            String fullUrl = path;
            if (request.getQueryString() != null && request.getQueryString().length() > 0) {
                fullUrl += "?" + request.getQueryString();
            }
            response.getWriter().print(process(fullUrl));
            return;
        }

        // find file in resources path
        returnResourceFile(path, uri, response);
    }
我们注意这2行

 if ("/submitLogin".equals(path)) {
  if (isRequireAuth() //
从着两行看以看出是校验用的,第一个是登录,第二个是确认是否需要验证权限,再来看方法isRequireAuth
public boolean isRequireAuth() {
        return this.username != null;
    }
此方法仅有1行判断,即用户名不为空即可

在搜索一下username的赋值



原来在servlet初始化时获取的PARAM_NAME_USERNAME,在到上图即可知道参数是loginUsername

在看看登录代码



综合上面的分析在web.xml中配置servlet的初始化参数loginUsername和loginPassword即可

在访问druid的监控页面,会自动转到login.html



本文地址: http://blog.youkuaiyun.com/lanmo555/article/details/40107441

SpringBoot中实现Druid前端监控界面自动登录 最近在系统中集成Druid数据库连接池,Druid自带一个可视化监控界面,可以查看数据源、SQL执行详情、慢SQL记录等等…,但是在前端中嵌入监控界面时,还需要手动输入后台配置的账号密码,比较不方便,在研究了几个现有的方案后,都不太能较好的实现。GET使用GET请求明文携带账号密码存在安全隐患;而且需要自定义HTML页面,如果是前后端分离的,比较麻烦。 阅读详情

相关推荐

阿里Druid连接池配置详解

1、添加依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> 2、配置文件 spring: datasource: url:jdbc:mysql:/

q769890208的博客 1420

Druid Monitor监控JavaSE和JavaWeb

Druid Monitor监控JavaSE和JavaWeb

点滴成长 3万+

【S32K】S32K144入门笔记(3) SPI(lpspi组件)

0. 引言 与第二篇can对应,第三篇本来想写lin的,毕竟都是车身上常用的总线。但是lin比较麻烦,所以先拖后一下,先把SPI记录一下。 SPI在我们的系统架构中是S32K和ADAS之间做数据传输用的,毕竟速率够高,数据量能传的比较大。 1. 准备 1.1 SPI基础知识 1.2 开发环境 1.2.1 软件开发环境 1.2.2 硬件环境 SPI 2. Demo ...

YoYo的桃子树 2万+

Spring boot - Druid配置以及监控界面的使用

Spring boot - Druid配置以及监控界面的使用 1.依赖安装 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> </dependency> 2.application.properties配置 #druid_config #用户名 druid.login.user

weixin_44802870的博客 1229

OCC入门指南:从零开始掌握Open CASCADE Technology

本文是Open CASCADE Technology(OCC)的入门指南,详细介绍了这款开源C++三维几何建模内核的核心概念与价值。内容涵盖从零开始搭建开发环境、编写第一个显示立方体的程序,到深入理解其几何与拓扑核心、掌握Draw测试工具及Handle内存管理等关键编程范式,旨在帮助开发者快速掌握这一工业级CAD/CAE/CAM应用开发利器。

java5的博客 1275

paddlehub无法安装,安装报错【Bug完美解决】

paddlehub无法安装,安装报错【Bug完美解决】 我们正在进行一个基于Python的项目开发,该项目需要集成PaddleHub,以利用其丰富的深度学习模型和工具。PaddleHub提供了一种简便的方式来使用预训练模型,以加速开发过程并提高模型效果。 现在paddlehub安装出现问题了,本文彻底解决paddlehub无法安装的问题。

一键难忘的博客 3390

谈谈正则表达式的性能优化问题

来源:cnblogs.com/huangrenhui/p/13893903.html一.背景正则表达式是计算机科学的一个概念,很多语言都实现了它。正则表达式使用一些特定的元字符来检索、匹配...

Java笔记虾 3346

MicroCap声学仿真介绍(六)-入耳式耳机仿真

从上图可以看出,后腔开了泄声孔后,振膜的最大位移从4.8um提升到了10um,振膜位移增加了一倍。在实际应用中,一般耳机的前腔和后腔都需要开泄声孔,开孔的大小和调音网布的阻尼需要根据客户的要求以及仿真的结果进行权衡选择。接着在主界面放置电阻、电感、电容,电阻值为Rms,电感值为Mms,电容值为Cms,如下图。假设后腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。假设前腔泄声孔的直径为1.2mm,宽度为0.3mm,对应调音网的阻抗为5.5e8欧姆。

山无忧的博客 1802

python正则表达式匹配的问题

今天遇到一个问题:正则表达式匹配错误,印象深刻。

svygh123的专栏 977

Oracle EBS 寄销/VMI(2)-->采购篇

上篇有一部分设置需要建BPA后,将BPA编号与批准的供应商相关联.     本篇主要是讲的内容:一揽子采购协议-->准标采购订单-->收接入库-->子库转移-->创建冲减通知-->'按接收开票' 自动开票程序 1. PO-->采购订单à采购订单 创建一揽子采购协议,确定物料

陈显平的专栏-Oracle EBS 1万+

Python爬虫实战:采集行业协会、研究机构等平台的政策文件列表与PDF链接批量收集系统,支持自动下载、分类归档和数据库管理(SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 640

MySQL中有关正则表达式的问题

文章介绍了在MySQL中使用正则表达式进行查询的语法结构以及可能出现的问题和解决办法。

qq_38234015的博客 3160

【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)&驱动器&梯形/S形加减速算法&直线/圆弧插补

步进电机是一种把电脉冲信号转换为角位移(左)或线位移(右)的电动机。两相通常1.8°,三相通常1.2°、无相通常0.72°,角位移=脉冲个数X步距角。在非超载且不超频的情况下,电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率。所以只需要统计脉冲个数和频率,不再需要编码器测速和位置,具有优秀的开环能力,当然也可接编码器反馈速度和位置数据,实现更加精准的闭环控制。永磁式动态性能好,输出力矩大,但步距角大通常7.5°;反应式(磁阻式)结构简单成本低,步距角小一般1.2°,但振动噪音大动态性能差;

weixin_51658186的博客 5万+

正则表达式共享问题

票务监控 的一个应用:高亮原页面关注城市名,原来做法为对每条记录的innerhtml都进行   var reg=/郑州/g; el.innerHTML=el.innerHTML.replace(reg,"....");   想优化一下,避免不必要的DOM操作,同时共享一个正则实例:   var reg=/郑州/g; if(reg.test(el.innerHT...

{ focus : web } 201

智能预测性维护AI系统实战效率提升:AI应用架构师的技巧分享

在工业领域,预测性维护(Predictive Maintenance, PdM)是降低停机损失、优化维护成本的关键手段。然而,现有系统往往面临三大效率瓶颈数据处理延迟:工业设备产生的海量实时数据(如传感器、PLC)需传输至云端处理,导致预警滞后;模型推理效率:复杂深度学习模型(如ResNet、Transformer)在边缘设备上推理时间长,无法满足实时要求;落地集成困难:与企业现有ERP、MES、SCADA系统对接繁琐,导致“模型好用但业务不用”的尴尬。本文从架构、数据、模型、落地架构设计。

AI天才研究院 746

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

正则表达式回溯问题

运行程序时卡住,调试发现卡在正则表达式匹配语句,并且占了大量CPU,查资料初步了解可能发生了正则表达式回溯,解决办法就是进入以下网站测试正则表达式并改进写法 https://regex101.com/...

qk215796129的博客 1146

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Druid配置详解,新手必须读

什么是Druid Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。 Druid也是配置最简单使用最方便的一种连接池。 Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL...

Lailai Monkey的博客 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

springboot 集成 Druid

这里写自定义目录标题springboot 集成 DruidDruid开始使用在boot项目的配置文件中 增加Druid信息增加配置类的编写访问Druid的管理界面在监控系统中 查看数据访问信息 springboot 集成 Druid springboot 版本 2.14 Druid 版本 1.1.9 mybatis:版本 3.5.1 Druid 一款出自阿里巴巴的开源数据库连接池, 1,可以配置数...

IT 工农兵 579

Druid配置详解

然而,需要注意的是,执行这个测试同样会带来一定的性能开销,尤其是在连接频繁获取和释放的场景下。如果设置为true,每当应用程序请求一个连接时,连接池会先执行一次连接测试,如执行一个简单的SQL查询或预定义的验证语句,确保即将返回的连接是可用的。Druid连接池会定期检查当前连接池中的空闲连接数量,如果空闲连接数低于minIdle设置的值,连接池会自动创建新的连接,以保证即使在低负载期间也有足够的空闲连接可供快速复用,这样可以在遇到突发流量时,减少因创建新连接而导致的延迟,从而提升系统的响应速度和稳定性。

qq_45746199的博客 1393

解决Alibaba Druid 未授权访问【原理扫描】

今天在漏洞扫描中收到了一个通报表,扫出来有一个Alibaba Druid 未授权访问【原理扫描】的漏洞,解决方法是对druid进行权限配置,接下来讲一讲怎么解决这个漏洞。

weixin_46612437的博客 5389

案例: 模拟登陆,获取Druid SQL监控数据

1.jar包版本 <!-- alibaba的druid数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version&...

u010235716的博客 1285

SpringBoot项目中Druid自动登录

SpringBoot集成Druid并且自动/跳过登录Druid是什么集成Druid不可避免的配置引用properties配置Druid过滤一些设置自动登录可以的到信息使用Filter 过滤 替换掉Url最终结果 Druid是什么 2019最受欢迎中国开源软件评选投票https://www.oschina.net/project/top_cn_2019 请参与投票。   &nbs...

陈增林 7191

druid pool 连接信息

durid pool 连接信息,查询数据库时卡死,没有响应,暂时解决的问题

weixin_63656744的博客 2526

为Druid监控配置访问权限(配置访问监控信息的用户与密码)

Druid是一个强大的新兴数据库连接池,兼容DBCP,是阿里巴巴做的开源项目. 不仅提供了强悍的数据源实现,还内置了一个比较靠谱的监控组件。  GitHub项目主页: https://github.com/alibaba/druid QQ群:  点击链接加入群【阿里开源技术交流】 演示地址: http://cncounter.duapp.com/druid/index.ht

AndyLizh的专栏 8236

使用Druid数据源,页面报错500

SpringBoot数据访问 使用Druid数据源 数据源配置完成 注册Servlet,StatViewServlet:控制进入管理后台 配置一个监控的filter 配置能够登陆Druid页面,也能够监控管理 但是跳转SQL执行测试页面出现500错误 查看一下控制台输错的错误 2019-08-20 16:41:33.046 INFO 9512 --- [nio-8080-exec-7] com....

mangorose的博客 1368

springboot-druid配置

1.阿里巴巴druid数据源 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDat...

喝醉的咕咕鸟 1513
上一篇: 数据库连接池从c3p0迁移到druid
下一篇: 如何判断一个请求是否为AJAX请求
ShadowWalker
博客等级 码龄16年 78粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值