本篇来源于官方文档,但不仅仅是翻译,其中不乏网上搜索的资料与自己的理解。

如有错误,请予指正。

什么是Realm

  首先说一下什么是Realm,可以把它理解成“域”,也可以理解成“组”,因为它类似 类Unix系统 中组的概念。

  Realm域提供了一种用户密码与web应用的映射关系。

  因为tomcat中可以同时部署多个应用,因此并不是每个管理者都有权限去访问或者使用这些应用,因此出现了用户的概念。但是想想,如果每个应用都去配置具有权限的用户,那是一件很麻烦的事情,因此出现了role这样一个概念。具有某一角色,就可以访问该角色对应的应用,从而达到一种域的效果。

  参考上面的图:

  每个用户我们可以设置不同的角色(在tomcat-users.xml中配置),

  每个应用中会设定可以访问的角色(在web.xml中配置),

  当tomcat启动后,就会通过Realm进行验证(在server.xml中配置),通过验证才可以访问该应用,

  从而达到角色安全管理的作用。

理解server.xml

  在tomcat中,要理解其架构设计,可以参考下面的图,该图是从《Apahce tomcat高级配置》一书中扒下来的。

  参考上面的图解释下:

  server:即服务器,每个tomcat程序启动后,就是一个server。

  service:这是一种抽象的服务,通常是在日志或者管理时使用这样一个概念。它把连接器和处理引擎结合在一起。

  connector:用于处理连接和并发,通常包括两种方式HTTP和AJP。HTTP是用于网页地址栏http这种访问方式;AJP一般用于搭配Apache服务器。

  engine:处理引擎,所有的请求都是通过处理引擎处理的。

  host:虚拟主机,用于进行请求的映射处理。每个虚拟主机可以看做独立的请求文件。

  realm:用于配置安全管理角色,通常读取tomcat-uesrs.xml进行验证。

  context:上下文,对应于web应用。

  有了上面的概念的理解,就可以简单的想象一下tomcat的处理过程:

  大体过程如下:

  0 首先请求发送给服务器;

  1 服务器使用相应的服务进行处理。

  2 先通过不同的连接器请求后发送给处理引擎。

  3 处理引擎通过对虚拟主机的分析,发送给相应的虚拟主机。

  4 虚拟主机使用相应的应用进行相应。

  简言之,就是请求会先发送到连接器,连接器转给处理引擎进行处理。

  再看看默认的server.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<GlobalNamingResources>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
<Context docBase="E:\software\Tomcat6.0.14\apache-tomcat-6.0.14\wtpwebapps\firstFilter" path="/firstFilter" reloadable="true" source="org.eclipse.jst.jee.server:firstFilter"/> <!-- 自己添加的 -->
</Host>
</Engine>
</Service>
</Server>

  去掉注释部分可以观察的更方便,可以看到默认情况下,Realm的配置位置是在Engine标签内部,并且使用的是UserDatabase的方式。其他的方式会在下面部分说明。

  其中Realm的不同位置也会影响到它作用的范围。

1 在<Engine>元素内部 —— Realm将会被所有的虚拟主机上的web应用共享,除非它被<Host>或者<Context>元素内部的Realm元素重写。

2 在<Host>元素内部 —— 这个Realm将会被本地的虚拟主机中的所有的web应用共享,除非被<Context>元素内部的Realm元素重写。

3 在<Context>元素内部 —— 这个Realm元素仅仅被该Context指定的应用使用。

Realm获取用户信息方式

  目前tomcat支持多种Realm管理方式,即支持多种方式来读取用户信息进行验证。参考如下:

  

1 JDBCRealm 用户授权信息存储于某个关系型数据库中,通过JDBC驱动获取信息验证

2 DataSourceRealm 用户授权信息存储于关于型数据中,通过JNDI配置JDBC数据源的方式获取信息验证

3 JNDIRealm  用户授权信息存储在基于LDAP的目录服务的服务器中,通过JNDI驱动获取并验证

4 UserDatabaseRealm 默认的配置方式,信息存储于XML文档中 conf/tomcat-users.xml

5 MemoryRealm 用户信息存储于内存的集合中,对象集合的数据来源于xml文档 conf/tomcat-users.xml

6 JAASRealm 通过JAAS框架访问授权信息

  (后续会给出不同的Realm的配置方式)
 

配置过程

  1 在server.xml中配置realm访问方式

  参考下默认的配置server.xml中,可以看到默认情况下使用的就是UserDatabaseRealm的方式:

  上图中的代码配置了UserDatabase的目录文件,为conf/tomcat-users.xml

  上图中的代码配置使用的Realm方式。

  2 在tomcat-users.xml中配置用户密码以及分配角色
  

  上面是tomcat-users.xml中的配置内容。

  3 在应用的web.xml中配置其访问角色以及安全限制的内容

  关于Realm域的使用,一般都是用来管理一些安全性要求很高的应用,最常见的就是manager应用。

  manager应用用于在不停止tomcat的情况下部署或者停止某些应用,处于安全考虑,默认情况下时不能访问manager应用的,因此需要现在tomcat-users.xml中添加用户以及相应的角色,才能访问。

  参考下tomcat中manager应用的角色配置,观察其web.xml配置文件,可以找到下面这段:

  <security-constraint>
<web-resource-collection>
<web-resource-name>HTMLManger and Manager command</web-resource-name>
<url-pattern>/jmxproxy/*</url-pattern>
<url-pattern>/html/*</url-pattern>
<url-pattern>/list</url-pattern>
<url-pattern>/sessions</url-pattern>
<url-pattern>/start</url-pattern>
<url-pattern>/stop</url-pattern>
<url-pattern>/install</url-pattern>
<url-pattern>/remove</url-pattern>
<url-pattern>/deploy</url-pattern>
<url-pattern>/undeploy</url-pattern>
<url-pattern>/reload</url-pattern>
<url-pattern>/save</url-pattern>
<url-pattern>/serverinfo</url-pattern>
<url-pattern>/status/*</url-pattern>
<url-pattern>/roles</url-pattern>
<url-pattern>/resources</url-pattern>
</web-resource-collection>
<auth-constraint>
<!-- NOTE: This role is not present in the default users file -->
<role-name>manager</role-name>
</auth-constraint>
</security-constraint> <!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Tomcat Manager Application</realm-name>
</login-config> <!-- Security roles referenced by this web application -->
<security-role>
<description>
The role that is required to log in to the Manager Application
</description>
<role-name>manager</role-name>
</security-role>

  其中role-name就定义了可以访问的角色。

  其他内容中上面定义了限制访问的资源,下面的Login-config比较重要。

  它定义了验证的方式,BASIC就是基本的弹出对话框输入用户名密码。还是DIGEST方式,这种方式会对网络中的传输信息进行加密,更安全。

参考

【1】Realms and AAA:http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html

【2】Realm 配置:http://wibiline.iteye.com/blog/655424

【3】Tomcat安全域:http://blog.163.com/liangge_sky/blog/static/210500188201102031733245/

Tomcat 6 —— Realm域管理的更多相关文章

  1. tomcat的realm域

    Realm域,其实可以看成是一个包含了用户及密码的数据库,而且每个用户还会包含了若干角色.也就是包含了用户名.密码.角色三个列的数据记录集合,如下图,最下面椭圆内的包含的整块即可以看成realm域.它 ...

  2. tomcat之Session的管理

    Session是由服务器端的应用服务器容器(如Tomcat.Jetty)存储的.下面分析一下Tomcat是如何管理Session的. 转自:tomcat架构分析 (Session管理) Tomcat中 ...

  3. How Tomcat works — 八、tomcat中的session管理

    在使用shiro的session的时候感觉对于tomcat中session的管理还不是特别清楚,而且session管理作为tomcat中比较重要的一部分还是很有必要学习的. 目录 概述 session ...

  4. 【转】Tomcat组件生命周期管理

    Tomcat组件生命周期管理 Tomcat中Server,Service,Connector,Engine,Host,Context,它们都实现了org.apache.catalina.Lifecyc ...

  5. Citrix 服务器虚拟化之二 Xenserver加域管理

    Citrix 服务器虚拟化之二   Xenserver加域管理 如果要使用多个用户和用户组来管理XenServer服务器,就必须使用 Active Directory 用户账户进行身份验证.XenSe ...

  6. 以域管理账户连接到TFS或git时,设置IE允许Cookies

    在 Windows 域环境中,每个项目组会创建一个项目管理账户,在和其他项目组进行数据交互时,只需要授予该项目管理账户相应的权限,方便了权限的管理.对于项目组管理账户:domain\admin,该域账 ...

  7. window 2008 下 安装域管理并且控制禁用QQ和U盘

    场景需求下: 需求一:禁止普通用户使用USB.CD-ROM等驱动器防止病毒和资料外泄  需求二:并USB 键盘鼠标要可以使用 三:限制qq聊天工具的使用.这是公司真实环境需求.因此需要先模拟测试一下, ...

  8. 转:解决tomcat服务器跨域问题

    原文地址: 解决tomcat服务器跨域请求问题 注:还未测试 在tomcat 的web.xml 配置文件中加入如下配置过滤器 (如web.xml中有多个filter时要把下面配置放在最前端) < ...

  9. Tomcat默认工具manager管理页面访问配置

    Tomcat的默认工具manager配置,在很多的生产环境中由于基本用不到.或者是不太需要使用Tomcat默认的manager管理页面时一般都会把Tomcat的默认webapp下的内容给删除了,但是如 ...

随机推荐

  1. Ubuntu下root密码认证错误

    1.默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo passwd root,然后输入当前用户的密码,再输入要设置root的密码,我们一般设置成两个都一样 ...

  2. Search and Replace的正则表达式

    以下例子均在Search and Replace中适用,EditPlus也有正则表达式,但有点不一样. 1.1 基本操作符 * 重复0次或更多次 + 重复一次或更多次 ? 重复一次 | 或 操作符 ! ...

  3. CameraFlash手电筒

    有时候晚上找不到电棒,电灯,咱们可以写个小程序,利用照相机的闪光灯临时顶替上代码: 1 package com.linux.cameraflash; import android.hardware.C ...

  4. php面向对象中static静态属性和静态方法的调用

    这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态 ...

  5. fork子进程僵尸问题及解决方案

    额,原来用 c 写 cgi 的时候用过 fork .那时候 cgi 的生命很短,所以遇到的问题压根没出现过.这次也是更加深入的对 fork 机制进行了一下了解. 参考这里的文档:http://ju.o ...

  6. ofo走出校园观察:市场定位导致产品错位?

    Ofo和摩拜单车虽然同样都是做单车共享,但实际上两者在最初的市场定位是有明显的差异的,因此提供的产品方案也存在巨大的差异. 市场定位不同,导致产品方案的巨大差异 摩拜单车一开始就定位于开放市场,充分的 ...

  7. 远程连接RabbitMQ失败

    远程连接RabbitMQ失败 为了避免污染宿主系统环境,于是在虚拟机中搭建了一个linux环境并且按照了rabbitmq-server.然后在远程连接的时候一直连接失败. 官网上面给的例子都是在本地使 ...

  8. Guava 集合框架

    在本系列中我们首先来学习一些Guava的集合框架,也就是这个package:com.google.common.collect 在这个包下面有一些通用的集合接口和一些相关的类.   集合类型: BiM ...

  9. HDU #5733 tetrahedron

    tetrahedron 传送门 Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 65536/65536 K (Java/Others) P ...

  10. Mac配置一些开发环境(随时补充)

    Mac安装mysql并启动 brew install mysql mysql.server start /usr/local/Cellar/mysql/5.6.10/support-files/mys ...