为Druid监控配置访问权限(配置访问监控信息的用户与密码)
转:
Druid是一个强大的新兴数据库连接池,兼容DBCP,是阿里巴巴做的开源项目.
不仅提供了强悍的数据源实现,还内置了一个比较靠谱的监控组件。
GitHub项目主页: https://github.com/alibaba/druid
QQ群: 点击链接加入群【阿里开源技术交流】
演示地址: https://cncounter.duapp.com/druid/index.html
常见问题回答请参考: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
一篇CSDN对Druid的介绍 druid简单教程
因为想要监控数据,又不愿意谁都可以访问,所以想要配置个密码.在开源群里一问,就知道原来内部已经有实现了.
先贴完成后的代码:
web.xml 部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<! -- Druid,监控数据库,以及WEB访问连接信息 --> <! -- 参考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter --> <filter> <filter- name >DruidWebStatFilter</filter- name > <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> <init-param> <param- name >exclusions</param- name > <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,*.jsp,/druid/*,/download/*</param-value> </init-param> <init-param> <param- name >sessionStatMaxCount</param- name > <param-value>2000</param-value> </init-param> <init-param> <param- name >sessionStatEnable</param- name > <param-value> true </param-value> </init-param> <init-param> <param- name >principalSessionName</param- name > <param-value>session_user_key</param-value> </init-param> <init-param> <param- name >profileEnable</param- name > <param-value> true </param-value> </init-param> </filter> <filter-mapping> <filter- name >DruidWebStatFilter</filter- name > <url-pattern>/*</url-pattern> </filter-mapping> <! -- 配置 Druid 监控信息显示页面 --> <servlet> <servlet- name >DruidStatView</servlet- name > <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> <init-param> <! -- 允许清空统计数据 --> <param- name >resetEnable</param- name > <param-value> true </param-value> </init-param> <init-param> <! -- 用户名 --> <param- name >loginUsername</param- name > <param-value>druid</param-value> </init-param> <init-param> <! -- 密码 --> <param- name >loginPassword</param- name > <param-value>druid</param-value> </init-param> </servlet> <servlet-mapping> <servlet- name >DruidStatView</servlet- name > <url-pattern>/druid/*</url-pattern> </servlet-mapping> |
首先,因为使用的是 MAVEN, 所以查看源码时maven会自动帮你下载. 我们在 web.xml 中点击 com.alibaba.druid.support.http.StatViewServlet 进入class文件,等一会源码下载好就可以查看. 发现有类似下面这样的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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 ; ......... |
StatViewServlet extends ResourceSerlvet
而在其中的 jmxUrl、jmxUsername 和 jmxPassword 很显然是连接远程 JMX时使用的,那么我就想着去看看父类: com.alibaba.druid.support.http.ResourceSerlvet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@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 ; .......... |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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() 方法,看着像是判断是否需要授权验证,于是进去看
1
2
3
|
public boolean isRequireAuth() { return this.username != null ; } |
那现在知道是 username 在作怪,也设置了,但是没有起作用,于是搜索 username ,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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,成功进行了拦截.
为Druid监控配置访问权限(配置访问监控信息的用户与密码)的更多相关文章
- apache 2.4 访问权限配置
在apache 2.4里,访问权限配置与2.2不同,如果设置不对,则会报403错误,日志中会报 AH01630: client denied by server configuration. [S ...
- svn数据仓库配置,权限配置
svn服务的开启有两种方式, · 自带的svnserve服务(访问地址类似于svn://192.168.80.18/repos/) · 与Apache配合使用 (访问地址 ...
- apache vhost 访问权限配置
apache的<directory> </directory>语句,查考如下: 如何访问根目录下的目录http://192.168.1.12/test/ 第一.缺省ap ...
- CentOS 6.5系统上安装SVN服务器端的方法及目录访问权限配置(转总结)
SVN其实就是Subversion,分为服务器端和客户端.之前在网上搜了很多方法,都有各种问题,经过自己搜集整理以及实际尝试,总算有个比较靠谱的方法.本文主要介绍CentOS 6.5系统上安装SVN服 ...
- django Rest Framework----认证/访问权限控制/访问频率限制 执行流程 Authentication/Permissions/Throttling 源码分析
url: url(r'books/$',views.BookView.as_view({'get':'list','post':'create'})) 为例 当django启动的时候,会调用执行vie ...
- asp.net上传文件夹权限配置以及权限配置的分析
切记:一定要禁止给公共上传文件夹的权限设置为everyone,且为完全控制!除非你这个文件夹属于内部操作的,那这样做是允许,其余情况一律禁止! 基本的文件上传文件夹权限配置: 1.在需要配置上传的文件 ...
- 【windows 访问控制】五、访问权限和访问掩码AcessMask
访问掩码格式 所有安全对象都使用下图所示的访问掩码格式来安排其访问权限. 在这种格式中,低16位用于特定对象的访问权限,后8位用于标准访问权限,这些权限适用于大多数类型的对象,而4个高位用于指定通用访 ...
- Nginx访问权限配置
最近建个人网站,在服务器上新建了一个用户zengfp,并且把网站的目录放到了/home/zengfp/www目录下,配置的nginx: server { listen 80 default_serve ...
- vueThink权限配置
vueThink中的 admin 默认是展示所有权限,其他的权限组用户就要自己去特定进行配置 http://vuedemo.cn:8181 这里我是默认本地配置了apache到 php\public ...
随机推荐
- css元素选择器
css的元素选择器就是html的标签名:
- 一、MyCat的搭建
一.什么是mycat 简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库. mycat是个中间件,它负责连 ...
- Lodop“对象不支持SET__LICENSES属性或方法”SET__LICENSES is not a function”
Lodop中的方法如果书写错误,就会报错:“对象不支持XXX属性或方法”调试JS会报错”SET__LICENSES is not a function” LODOP.SET_LICENSES是加注册语 ...
- Cherry.chen window.clipboardData实现剪切板操作总结 (好像只有ie好用)
window.clipboardData的作用是在页面上将需要的东西复制到剪贴板上,提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用. 三个方法 (1)clearData(sDataForma ...
- 另一个ado工具类
using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;using Sy ...
- solr单机版搭建
需要把solr服务器安装到linux环境: 第一步:安装linux.jdk.tomcat. [root@bogon ~]# ll total 8044 -rw-r--r--. 1 root root ...
- ubuntu系统备份与恢复-remastersys方法
http://blog.csdn.net/yaoqi_isee/article/details/73730010 http://blog.csdn.net/handsome_sheng/article ...
- ubuntu系统安装mysql(deb-bundle包)
由于某些原因,又要在ubuntu系统中安装mysql了,之前曾经安装过好多次.都没记下来 以前一直动用源码包来安装,基于两个原因:1.一直用Python写代码.2.想使用文件来安装,而不是通过api ...
- python字典与集合操作
字典操作 字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 语法: info = { 's1': "jack", 's3' ...
- python模块psutil的使用
介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统 ...