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有些劣勢
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章