2025年druid监控页面配置密码(druid session监控)

druid监控页面配置密码(druid session监控)p Druid 是一个强大的新兴数据库连接池 兼容 DBCP 是阿里巴巴做的开源项目 p 不仅提供了强悍的数据源实现 还内置了一个比较靠谱的监控组件 GitHub 项目主页 https github com alibaba druid 点击链接加入群 阿里开源技术交流 常见问题回答请参考 https github

大家好,我是讯享网,很高兴认识大家。



 <p>Druid是一个强大的新兴数据库连接池,兼容DBCP&#xff0c;是阿里巴巴做的开源项目.</p> 

讯享网

不仅提供了强悍的数据源实现,还内置了一个比较靠谱的监控组件。 

GitHub项目主页: https://github.com/alibaba/druid

:  点击链接加入群【阿里开源技术交流】

常见问题回答请参考: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

一篇CSDN对Druid的介绍  druid简单教程

因为想要监控数据,又不愿意谁都可以访问,所以想要配置个密码.在开源群里一问,就知道原来内部已经有实现了.

先贴完成后的代码:

web.xml 部分:


讯享网

    &lt;!– Druid,监控数据库,以及WEB访问连接信息 –&gt;
    &lt;!– 参考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter –&gt;
    &lt;filter&gt;
        &lt;filter-name&gt;DruidWebStatFilter&lt;/filter-name&gt;
        &lt;filter-class&gt;com.alibaba.druid.support.http.WebStatFilter&lt;/filter-class&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;exclusions&lt;/param-name&gt;
            &lt;param-value&gt;.js,.gif,.jpg,.png,.css,.ico,.jsp,/druid/,/download/&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;sessionStatMaxCount&lt;/param-name&gt;
            &lt;param-value&gt;2000&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;sessionStatEnable&lt;/param-name&gt;
            &lt;param-value&gt;true&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;principalSessionName&lt;/param-name&gt;
            &lt;param-value&gt;session_user_key&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;profileEnable&lt;/param-name&gt;
            &lt;param-value&gt;true&lt;/param-value&gt;
        &lt;/init-param&gt;
    &lt;/filter&gt;
    &lt;filter-mapping&gt;
        &lt;filter-name&gt;DruidWebStatFilter&lt;/filter-name&gt;
        &lt;url-pattern&gt;/
&lt;/url-pattern&gt;
    &lt;/filter-mapping&gt;
    &lt;!– 配置 Druid 监控信息显示页面 –&gt;
    &lt;servlet&gt;
        &lt;servlet-name&gt;DruidStatView&lt;/servlet-name&gt;
        &lt;servlet-class&gt;com.alibaba.druid.support.http.StatViewServlet&lt;/servlet-class&gt;
        &lt;init-param&gt;
            &lt;!– 允许清空统计数据 –&gt;
            &lt;param-name&gt;resetEnable&lt;/param-name&gt;
            &lt;param-value&gt;true&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;!– 用户名 –&gt;
            &lt;param-name&gt;loginUsername&lt;/param-name&gt;
            &lt;param-value&gt;druid&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;!– 密码 –&gt;
            &lt;param-name&gt;loginPassword&lt;/param-name&gt;
            &lt;param-value&gt;druid&lt;/param-value&gt;
        &lt;/init-param&gt;
    &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;DruidStatView&lt;/servlet-name&gt;
        &lt;url-pattern&gt;/druid/*&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;

public class StatViewServlet extends ResourceSerlvet {
 
    private final static Log      LOG                     = LogFactory.getLog(StatViewServlet.class);
 
    private static final long     serialVersionUID        = 1L;
 
    public static final String    PARAM_NAME_RESET_ENABLE = “resetEnable”;
 
    public static final String    PARAM_NAME_JMX_URL      = “jmxUrl”;
    public static final String    PARAM_NAME_JMX_USERNAME = “jmxUsername”;
    public static final String    PARAM_NAME_JMX_PASSWORD = “jmxPassword”;
 
    private DruidStatService      statService             = DruidStatService.getInstance();
 
    / web.xml中配置的jmx的连接地址 */
    private String                jmxUrl                  = null;
    / web.xml中配置的jmx的用户名 */
    private String                jmxUsername             = null;
    / web.xml中配置的jmx的密码 */
    private String                jmxPassword             = null;
………

@SuppressWarnings(“serial”)
public abstract class ResourceSerlvet extends HttpServlet {
 
    private final static Log   LOG                 = LogFactory.getLog(ResourceSerlvet.class);
 
    public static final String SESSION_USER_KEY    = “druid-user”;
    public static final String PARAM_NAME_USERNAME = “loginUsername”;
    public static final String PARAM_NAME_PASSWORD = “loginPassword”;
    public static final String PARAM_NAME_ALLOW    = “allow”;
    public static final String PARAM_NAME_DENY     = “deny”;
    public static final String PARAM_REMOTE_ADDR   = “remoteAddress”;
 
    protected String           username            = null;
    protected String           password            = null;
……….

看到了 username 和 password,很高兴,先配置了试试,但是配置这两个初始化参数后没起作用,于是继续查找. 看到了 service方法,我们知道,Servlet的业务逻辑就是从这里开始的。
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ……
        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;
        }
    ……

发现调用了  isRequireAuth() 方法,看着像是判断是否需要授权验证,于是进去看
    public boolean isRequireAuth() {
        return this.username != null;
    }
那现在知道是 username 在作怪,也设置了,但是没有起作用,于是搜索 username ,

    public void init() throws ServletException {
        initAuthEnv();
    }
 
    private void initAuthEnv() {
        String paramUserName = getInitParameter(PARAM_NAME_USERNAME);
        if (!StringUtils.isEmpty(paramUserName)) {
            this.username = paramUserName;
        }
 
        String paramPassword = getInitParameter(PARAM_NAME_PASSWORD);
        if (!StringUtils.isEmpty(paramPassword)) {
            this.password = paramPassword;
        }
      ……
然后发现了初始化验证环境时使用了PARAM_NAME_USERNAME这个参数,顺便的学习了一个新API: getInitParameter 方法获取 Servlet的初始化参数, 是HttpServlet的父类 GenericServlet 类提供的:
String paramUserName = getInitParameter(PARAM_NAME_USERNAME);
那么很简单,找到 PARAM_NAME_USERNAME 即可:
    public static final String PARAM_NAME_USERNAME = “loginUsername”;
    public static final String PARAM_NAME_PASSWORD = “loginPassword”;
于是在 web.xml 中换上,OK,成功进行了拦截.
你也可以参考这里:  CNCounter项目的web.xml
——————— 
版权声明:本文为CSDN博主「铁锚」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/renfufei/article/details/

小讯
上一篇 2025-06-14 18:50
下一篇 2025-06-16 19:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/152649.html