serlvet安全的4大要素

认证、授权、机密性和数据完整性。

容器完成认证和授权的过程

代码中不要有安全信息

大多数Web应用,大多数情况下Web应用的安全约束都应该以声明方式处理,即在部署描述文档中指定。原因如下:

谁不想更多地采用XML呢

通常能自然地映射到公司IT部门现有的任务角色

你可以用更灵活的方式使用以前servlet

应用开发人员可以重servlet不用去碰源代码

随着应用的扩展,可以减少可能的维护

还有一点,这正好能体现容器的价值

支持基于组件的开发思想

谁来实现Web应用中的安全?

-servlet提供者只需要关注业务

  • 应用管理员只需要确定应用中有哪些角色(如tomcat中的conf/tomcat-users.xml)
  • 主要任务由部署人员承担:确定哪些角色可以访问哪些servlet

授权的步骤

  • 安全领域

    安全领域即存储认证信息的地方,如tomcat的tomcat-users.xml会在启动时读入内存,则成为内存领域。(测试时可以在该文件存放角色认证信息,生产环境则一般不推荐,而是用LDAP或关系数据库存放)。
  • tomcat-users.xml文件

  • 启动认证

    要让容器询问用户名和口令,需要在DD中如下配置,才能进行认证:

  • 授权第一步:定义角色

    把开发商(Tomcat)特定的“用户”文件的角色映射到部署描述文件中建立的角色。

    如开发商特定的tomcat-users.xml中的role元素:



    以及servlet规范:web.xml中的DD security-role元素:

  • 授权第二步:定义资源/方法约束security-constraint

    以声明的方式指定一个给定的资源/方法组合中能由特定角色的用户所访问。

    在DD的security-constraint元素:



    关于security-constraint子元素web-resource-collection的要点:



    <web-resource-collection>元素有两个主要的子元素:url-pattern(一个或多个)和http-method(可选,0个或多个);

    URL模式和HTTP方法一同定义受限资源请求;

    web-resource-name元素是必要的,就算你自己可能不会用它(可以认为它要由IDE使用,或留待将来使用);

    description元素是可选的;

    url-pattern元素使用servlet标准命名和映射规则(有关URL模式的详细内容可以去看关于“部署’那一章);

    必须至少指定一个url-pattern,不过也可以有多个;

    http-method元素的合法方法包括:GET、POST、PUT、TRACE、DELETE、HEAD和OPTIONS;

    如果没有指定任何HTTP方法,那么所有方法都是受约束的!!;

    如果确实指定了http-method,则只有所指定的方法是受约束的。换言之,一旦指定了一个http-method,就会自动使未指定的HTTP方法不受约束;

    一个security-constraint中可以有多个web-resource-collection元素;

    auth-constraint元素应用于security-constraint中的所有web-resource-collection元素。

    auth-constraint元素并不是定义哪些角色可以访问web-resource-collection中的资源,相反,它只是定义了哪些角色可以做出受约束的请求。

关于security-constraint子元素auth-constraint子元素:

auth-constraint规则:



在security-constraint元素中,auth-constraint元素是可选的;

如果存在一个auth-constraint,容器必须对相关URL进行认证;

如不存在auth-constraint,容器运行不经认证就能访问这些URL;

为提高可读性,可以在auth-constraint中增加一个description元素。

role-name规则:



在auth-constraint元素中,role-name元素是可选的;

如果存在role-name元素,它们会告诉容器哪些角色得到许可;

如果存在一个auth-constraint元素,但是没有任何role-name子元素,那么所有用户都遭到拒绝;

如果有<role-name>*</role-name>,那么所有用户都是允许的;

角色名区分大小写。

多个security-constraint/auth-constraint元素的对决

`

  1. 合并单个的角色名时,所列的所有角色名都允许访

    问;
  2. 角色名“*”与其他设置合少t–时,所有人都允许访

    问;
  3. 空的(空的不是没有)auth-constraint标记与其他设置合并时,所有人都不允许访问!换句话说,空的auth-constraint就是最后“宣判”!
  4. 如果某个security-constraint素没有auth-constraint元素,它与其他设置合并时,所有人都允许访问。

    `

    两个不同的非空auth-constraint元素应用于同一个受限资源,那么两个auth-constraint元素中所有角色的并集都运行访问。

    受限访问,指的是客户不能访问,但是Web应用的其他部分时可以的。

看看认证

  • 4中认证类型

    基本认证、摘要认证、客户证书认证和表单认证。
  • 实现认证

    在DD中声明认证机制,主要是login-config元素

认证类型小结

基于表单的认证

表单登录,可以定制自己的登录表单页面,而不是用其他3中认证所有的浏览器登录窗口。

表单登录安全保证:HTTPS

要实现数据机密性和/或完整性时,J2EE规范可以保证所传输的数据会经过一个“有保护的传输层连接”,即容器不必使用任何特定的协议来处理安全传输。(实际中几乎都会使用SSL之上的HTTPS协议。)

数据保护要有一些开销,且不会对应用中的每个请求和响应都加密,因此使用——以声明方式保守地实现数据机密性和完整性:

数据保护

  • 未经认证的客户请求一个没有传输保证的受限资源

  • 未经认证的客户请求一个受限资源,这个资源有机密性传输保证

《Head First Servlets & JSP》-12-Web应用安全的更多相关文章

  1. JSP之WEB服务器:Apache与Tomcat的区别 ,几种常见的web/应用服务器

    注意:此为2009年的blog,注意时效性(针对常见服务器)     APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等 ...

  2. 《Head First Servlets & JSP》-1-前言

    <Head First Servlets & JSP>(中文版) BB,KS & BB著, 苏钰函,林剑译,中国电力出版社 数据交互 Web浏览器和Web服务器:通过Htt ...

  3. 基于Servlet+jsp的web计算器

    基于Servlet+jsp的web计算器 这次老大为了让我们自己复习web中页面的跳转给布置得任务 天下代码一大抄,关键看你怎么抄 首先我想到的计算算法不是什么堆栈,是简单的(其实很复杂,但是我就只需 ...

  4. Springboot搭建SSM+JSP的web项目

    Springboot搭建SSM+JSP的web项目 一:创建项目结构: 项目结构分为三个部分: 1 后端项目开发文件: 包: Util         工具包 Mapper      db层 Serv ...

  5. Head First Servlets & JSP 学习笔记 第七章 —— 作为JSP

    <%@ …… %> 这是指令 <%@ page ……import="java.util.Date" %> 这是page指令,import是page指令的一个 ...

  6. JSP/Servlet Web 学习笔记 DayOne

    JSP概述 1)JSP是一种动态网页技术标准,它是在传统的页面HTML文件中插入Java程序段和JSP标记(tag),从而形成JSP文件(*.jsp),也称JSP页面. 2)JSP容器是一个支持JSP ...

  7. 用jsp开发web应用并不是一个高效率的选择

    1.    Android里有办法让js使用java方法像使用自己的方法一样方便,和flex的很相似,flex里面使用java方法就像使用自己的方法一样. 2.    用Flex开发准确的说就是用as ...

  8. JSP/Servlet Web应用中.properties文件的放置与读取

    本地项目 在本地类库中,我经常使用当前目录来放置.properties文件,这时调用方只要引用我的jar,并且将我的.properties放在他的classpath里面即可,比如: p.load(ne ...

  9. 12 Web Development Trends That Will Dominate 2022

    12 Web Development Trends That Will Dominate 2022 (mindinventory.com) Progressive Web Apps (PWAs) An ...

  10. Head First Servlets & JSP 学习笔记 第十一章 —— Web应用部署

    jar:java archive(java归档) war:web archive(web归档) war文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式(它实际上就是一个jar文件).建立 ...

随机推荐

  1. SVN客户端与服务器端搭建

    一.客户端安装 1.点击安装程序 2.修改svn安装位置 3.开始安装 4.安装完成 5.回到左面  右键出现svn检出 tortoiSVN  表示安装成功  二.SVN服务端安装 1.点击服务端安装 ...

  2. 用TCP穿透NAT(TCP打洞)的实现

    目录 TCP穿透原理 程序思路 声明 上代码 运行示例 1. TCP穿透原理: 我们假设在两个不同的局域网后面分别有2台客户机A和 B,AB所在的局域网都分别通过一个路由器接入互联网.互联网上有一台服 ...

  3. think python chapter2

    1.An assignment statement creates a new variable and gives it a value: Variable names can be as long ...

  4. laravel 对于ajax请求返回的数据

    ajax在调试器中的位置  XHR 代表 XMlHTTPREQUET 一般ajax请求php的时候我们需要给返回什么数据呢? 一般我都是直接renturn 数组的 其实也没啥问题 但是还是感觉第三种写 ...

  5. @property_@synthesize 配套使用

    @property 类默认实现变量的get set方法 @synthesize 是指定那个变量的 get和set方法 eg: .h文件中定义 类Student中含有两个 int age,和int _a ...

  6. mongoTemplate操作内嵌文档

    关系型数据库中,表与表的关联关系有1:1,也有1:n的.在java的面向对象的世界里就是主对象嵌子对象,与主对象嵌集合<子对象>的两种形式. 主对象嵌子对象操作: 新增.修改都直接用如下方 ...

  7. Set,Sorted Set相关命令操作,批量插入及管道,事务

    Set SADD key member [member ...] 向key指定的set集合添加成员,次集合是排重的,从2.4版本后才支持添加多个如果key不存在则创建key以及set集合返回当前操作成 ...

  8. Solaris ssh配置主机间信任关系

    假设需要配置从主机com00biiitf001登录主机ols00biiitf001时不需要密码,则采用以下步骤配置: com00biiitf001上产生公用/私有密钥对 $ ssh-keygen -t ...

  9. EmguCV3.0几个控件的使用

    值方图(Histogram)是一种统计图数据,在影像处理中最常被用来统计一张图像或是感兴趣(ROI)区域的色彩分布,在这边本人使用的EmguCV 2.4.0版的内建值方图工具只有被包含在WinForm ...

  10. 5-EasyNetQ之Publish(黄亮翻译)

    EasyNetQ支持的最简单的消息模式是发布/订阅.这个模式是一个极好的方法用来解耦消息提供者和消费者.消息发布者只要简单的对世界说,"这里有些事发生" 或者 "我现在有 ...