新启航培训学校:EJB 笔记 -chapter10 Security
chapter10 Security
一、Security(安全)的概念
1、Violations(侵害):
Violations,系统运行中,需要避免发生的事件(事件一旦发生,会侵害系统的安全)。
2、Vulnerabilities(弱点):
Vulnerabilities,系统中存在的漏洞或缺陷(如默认数据库管理员密码忘记修改)
3、Risk(风险)
Risk,是指发生侵害型事件的概率与发生后的危害的乘积。
4、Controls(控制)
Controls,发生侵害事件、弱点、风险采取何种方式去避免侵害的发生。
① Authentication(认证/验证)
系统要求访问这提供身份信息(通常为用户名和密码),系统采取某种方式去检验该身份信息(常利用Database),如IDAP,验证完后,将身份信息标识为一个主体/实体。
② Authorization(授权)
授权是系统根据认证后形成的主体找到主体对应的角色。角色与系统资源是一一对应的。
授权流程:
(认证):访问者→主体| |(授权):→角色→资源
系统依据角色赋予访问者相应的系统资源访问权限。
③ Data integrity protection(数据集成性保护)
系统对资源写操作进行相应的控制。
④ Data confidentiality protection(数据机密性保护)
系统对资源读操作进行相应的控制。
二、编程式与声明式安全
Web Application Security
1、Web中认证的方式
①基本认证/摘要认证
a、通过配置web.xml来配置一个基本认证的方案;
b、系统提供一个默认的表单接受用户输入的认证信息;
c、系统对用户输入的数据(用户名/密码等)不作输入加密操作,传送到后台处理;
d、认证信息存放在HTTP请求头当中。
基本认证常用在企业内部环境,少有恶意破坏的应用环境,性能较高。
②基于表单的认证
a、系统需要编程人员提供表单程序(表单定制);
b、系统将用户认证信息存放在HTTP请求体中;
c、不加密传送到后台处理。
③基于HTTPS协议的认证
a、系统采用HTTPS协议来传递信息(信息会加密);
b、系统采用公钥、私钥来对信息加密,采用证书来验证。
这种认证很常用,认证的方式也很可靠。
2、Web当中的授权
Declarative security(声明式授权)
①只需要在web.xml中配置相关元素
②需要在容器特定配置文件中作主体与角色的映射。
配置步骤:
①在容器中配置主体(容器中的用户)以及角色和主体对应关系;
②在web.xml中配置角色,资源,角色与资源的对应关系
③在sun-web.xml中配置主体与角色的对应关系。
关于声明式授权:
缺点:①粗粒度,只能控制到页面级;
② 只适用与简单的应用情况。
EJB Security
EJB中的认证与授权:
① Web容器对客户端进行认证
② Web容器将认证后的主体传递给EJB容器
③ EJB容器按照主体来控制EJB的调用
Web主要作认证,EJB主要作授权。
EJB认证
JAAS(Java Authentication Authorization Service,Java授权认证服务)
采用了策略模式
作用:在具体的认证与授权方案之前,提供一个抽象层(JAAS),可以使具体的认证授权方案与应用层解耦。
EJB授权
1、EJB中的编程式授权
①在EJB Bean类中编写安全的逻辑
②在EJB Bean类中,申明安全角色
③映射安全角色与主体的关系
@DeclareRoles(’manager’)→申明安全角色(可以是多个)
SessionContext.isCallerInRole()→逻辑安全角色
isCallerRole()方法可以用来判断调用这(客户端)的角色是否为安全角色
① ejb-jar.xml中配置逻辑安全角色与实际安全角色的对应关系;
② 配置实际安全角色;
③ 配置实际安全角色与主体(Principal)的对应关系(sun-ejb-jar.xml中)
主体是容器中配置的用户。
2、EJB中的声明式授权
① 声明安全角色
② 使用标注来声明方法权限
例如,@RuleAllowed(“employee”),即哪些安全角色可以访问该方法
③ 在配置文件中,映射安全角色与主体的对应关系
@DeclareRoles 声明角色
@DenyAll标注任何角色都不能访问该方法
@PermitAll标注任何角色都可以调用该方法
@RuleAllowed()指定哪些角色可访问该方法
@RunAs将角色暂时转换为……调用
chapter11 TimeService
Time Service(定时服务)
EJB如何调用EJB容器通过的定时服务?
在指定的某个时间点,执行相应的人任务。
常用的定时服务框架:
EJB(Since EJB2.1)
QuantZ(Open Source)
脚本(如UINX中的cron at)
1、EJB定时服务的原理
采用了模板方法
① 容器提供定时服务功能
② EJB要注册到定时服务器上
③ 到达指定时刻,容器会回调EJB中的方法
2、EJB定时服务的编程
TimerService API
javax.ejb.TimerService
① TimerService生成并返回一个Timer对象
② 构造在指定的时间点执行的Timer 或
构造演示一段事件后重复执行的Timer
③ 定义回调方法 TimeObject
a、EJB实现该接口
b、容器回调TimeObject也可以采用标注@Timeout来定义回调方法
通过EJBContext来获得定时服务
@Resourceprivate TimerService ts;
ts.createTimer(Date date,long interval,String meetingNote)创建定时服务逻辑并注册
@Timeout标注该方法为定时服务方法,导师EJB容器会回调这个方法。
EJB定时服务的优缺点:
优点:与平台无关,底层定时服务与EJB无关
缺点:粗粒度,不能在配置文件中配置时间