在了解了认证模式及Realm域后,我们看看Tomcat是如何设计实现资源安全管理的。在认证模式上,必须要支持多种认证模式,包括Basic模式、Digest模式、Form模式、Spnego模式、SSL模式及NonLogin模式。如何实现这些认证模式比较优雅,或者说比较清晰?看下图,在tomcat中一个请求从浏览器发送过来后,请求接收后会流向四个级别容器处理,即Engine->Host->Context->Wrapper,而且是以管道阀门(pipeline和valve)形式进行处理,只需往某个容器中添加一个阀门valve用于认证处理,由于要支持每个应用都可以有各自的认证机制,所以这个容器级别应该选为Context。

针对每种认证模式建立不同的认证器,例如Basic模式对应BasicAuthenticator、SSL模式对应SSLAuthenticator等等,这些认证器都要实现valve接口以便被Context的管道调用。认证器主要负责通过认证协议与客户端交互,收集用户的凭证信息并进行认证鉴权工作。所以这整个认证过程包含了两大步骤,一是收集用户凭证信息,另一个是对凭证鉴权,收集凭证其实就是用不同的协议约定让客户端协助收集,例如HTTP Basic协议。而对凭证的鉴权工作又是如何设计的?

鉴权工作主要是通过客户端用户名和密码找出相应的权限,然后根据查询出来的权限检查是否可以请求相应资源。正如下图,web层对应Context容器级别,所以在web应用中web.xml配置文件配置的权限信息会被加载到Context容器中,例如role1对应url1,role2对应url2、url3。除此之外,它还需要查询用户权限模块,这块就交由realm完成,realm抽象了用户与角色关系的一层。客户端传输过来用户名和密码后,xxxAuthenticator认证器通过realm获取到该用户的角色,然后判断是否有请求资源的权限,假如user1正在访问url1,通过user1和pwd1查出来的权限为role1,有url1权限则返回该资源。

Tomcat资源安全管理的实现思路很清晰,通过不同认证协议让客户端输入身份信息,接收到身份信息后则通过realm模块和web.xml权限配置共同判断是否返回正在请求的资源。

Tomcat如何实现资源安全管理的更多相关文章

  1. 给tomcat配置外部资源路径(应用场景:web项目访问图片视频等资源)

    对于一个web项目来说,除了文字之外,图片,视频等媒体元素也是其重要的组成部分.我们知道,web项目中如果用到大量的图片.视屏的资源,我们 通常的做法是只在数据库中存储图片.视频等资源的路径,web项 ...

  2. Tomcat 对静态资源的处理

    Tomcat 中的请求都是由 Servlet 处理,静态资源也不例外.在默认的 web.xml 中,配置了一个 DefaultServlet 用于处理静态资源,它支持缓存和断点续传. DefaultS ...

  3. tomcat缓存静态资源深入

    之前看过apach及nginx对于静态资源(含js,图片,css等)部分的缓存,用于加速并减轻后台实际web服务器的压力. 静态资源缓存是WEB服务器优化的一种手段,基本原理如下: 1.客户端浏览器请 ...

  4. Tomcat常用设置及安全管理规范

    前言 随着公司内部使用Tomcat作为web应用服务器的规模越来越大,为保证Tomcat的配置安全,防止信息泄露,恶性攻击以及配置的安全规范,特制定此Tomcat安全配置规范.注意:  本文章从htt ...

  5. 关于idea中,web项目启动tomcat,访问资源报错404

    背景: web项目启动tomcat,访问相应的资源,报错404,前提资源路径是没错的. 原因: 1.确定是不是web项目 不是的话: 配置web-inf的路径和webroot(web根目录)的路径 2 ...

  6. Nginx+Tomcat动静态资源分离

    1 创建用户.用户组 useradd -g users www passwd www //设置密码,否则该用户不可用 groupadd -g 888 www //创建用户组 gpasswd -a ww ...

  7. Tomcat警告之“资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间”

    原因 缓存不够,可以将其缓存调大 解决办法: 在 /conf/context.xml 的 前添加以下内容: <Resources cachingAllowed="true" ...

  8. 75篇关于Tomcat源码和机制的文章

    75篇关于Tomcat源码和机制的文章 标签: tomcat源码机制 2016-12-30 16:00 10083人阅读 评论(1) 收藏 举报  分类: tomcat内核(82)  版权声明:本文为 ...

  9. tomcat访问所有的资源,都是用Servlet来实现的

    感谢大佬:https://www.zhihu.com/question/57400909 tomcat访问所有的资源,都是用Servlet来实现的. 在Tomcat看来,资源分3种 静态资源,如css ...

随机推荐

  1. 常见常用的CSS

    字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...

  2. Centos 7安装MYSQL

    1.下载RPM源 直接使用yum命令下载mysql来进行安装是不能成功的,安装过程会有问题,这里需要使用rpm命令来先进下载.下载路径为: http://dev.mysql.com/get/mysql ...

  3. URL重定向漏洞,python打造URL重定向漏洞检测脚本

    前言: 今天学习了重定向漏洞,这个漏洞比较好理解 漏洞名:URL重定向漏洞 威胁:低 漏洞的来源:开发者对head头做好对应的过滤和限制 例子: 有漏洞的网站:http://a.com/x.php?u ...

  4. Tinyhttpd for Windows

    TinyHTTPd forWindows 前言 TinyHTTPd是一个开源的简易学习型的HTTP服务器,项目主页在:http://tinyhttpd.sourceforge.net/,源代码下载:h ...

  5. 多线程(四) 实现线程范围内模块之间共享数据及线程间数据独立(Map集合)

    多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 2.如果每个线程执行的代码 ...

  6. Redis监控工具,命令和调优

    Redis监控工具,命令和调优 1.图形化监控 因为要对Redis做性能测试,发现了GitHub上有个python写的RedisLive监控工具评价不错.结果鼓捣了半天,最后发现其主页中引用了Goog ...

  7. Android桌面小插件——Widget

    Android桌面小插件--Widget 效果图 实现 1. 创建Widget类 创建一个Widget类,并实现页面创建的时候,就实现显示时间 package com.kongqw.kqwwidget ...

  8. Xcode 调试技巧 --常用命令和断点

    Xcode 中的调试技巧与我们的日常开发息息相关,而这些调试技巧在我们解决Bug时,常常有事半功倍的作用,经常会用到的有各种断点 和 命令.而这些调试技巧也经常会在面试中问到,所以不知道的就来看看吧. ...

  9. cassandra 概述

    摘要 本篇文章主要是介绍cassandra与其他NoSQL的区别以及自身的特点与应用场景.在关系数据库我们没必要选择数据库,通常需要适配oracle/mysql/sql server/db2 等多种数 ...

  10. CSS3 滤镜学习

    html篇 样式篇 grayscale sepia saturate hue-rotate invert opactiy brightness contrast blur drop-shadow 综合 ...