javaee security 笔记

参考java ee 6 tutorial的security一章,学习笔记

 

java ee应用分成多个tier(层), client层是浏览器等, web层是jsp,jsf等,business层是ejb,db层是jpa、jdbc等。 不同tier的container分别提供security,这有一定道理,因为不同tier可能位于不同的物理服务器上,不能认为web tier安全了,后面的db也自动安全了,***也许直接奔向了db的服务器,访问ejb的remote interface等等,所以要层层把关。

security分成declarative and programmatic两种风格
 

declarative

 
假设用declarative的xml方式,则在dd中表示(或annotation)
web tier的dd是web.xml
ejb的dd是ejb-jar.xml
(注:annotation被人为划分在declarative,但它具有programmatic的特点,比如需要重新编译才能生效,此处暂略)
 

programmatic

 

注意只有在declarative不够用的情况下,才用programmatic方式,

用programmatic的方式时,有8个方法可用:
 
web tier上
HttpServletRequest.getAuthType  返回BASIC/FORM/DIGEST/CERT之类
HttpServletRequest.getUserPrincipal
HttpServletRequest.isUserInRole 
HttpServletRequest.authenticate    这个是servlet 3.0引入的,j2ee 1.2时代没有
HttpServletRequest.login    这个是servlet 3.0引入的,j2ee 1.2时代没有
HttpServletRequest.logout  这个是servlet 3.0引入的,j2ee 1.2时代没有
 
ejb tier上
EJBContext.isCallerInRole          安全是基于角色的,不是基于个别用户的
EJBContext.getCallerPrincipal   这里principal是负责人的意思,client要对其操作负责
 
 
Glassfish的安全 (单有一份glassfish admin guide可查)
 
用glassfish admin console可以创建user, admin-user
用工具配合可以创建cert证书等
 
在EJB中
用@DeclareRoles可以定义roles
用@RolesAllowed控制role对受控资源的访问
 
 
在servlet中
用@HttpConstraint加@ServletSecurity定义和控制对受控资源的访问
 
 
在开发jee app时,app developer需要随时考虑roles,但不需要知道glassfish server的realm里面的user分类,即groups
app roles和server用户的groups可以做mapping,如果恰好名字相同一一对应,则用默认principal-to-role即可,在glassfish admin console上有个勾选。
 
看过一篇文章,讲java ee security对比spring security有些劣势
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章