七剑下天山 绿珠:EJB 笔记 -chapter10 Security

来源:百度文库 编辑:中财网 时间:2024/04/26 14:05:07

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无关

  缺点:粗粒度,不能在配置文件中配置时间