|
|
雖
是所謂的編程式安全,不過還是搭配之前所談及的宣告安全環境設定來達成,您可以從EJBContextt的
getCallerPrincipal()來取得代表登入使用者的Principal,使用Principal的getName()方法來取得登入的使用
者名稱。 EJBContext一個搭配Role設定的方法是isCallerInRole(),若您的使用者已經通過驗證,可以藉由這個方法於程式中判定登入的使 用者其Role為何,並進 一步決定可使用的資源,例如: ...
if(context.isCallerInRole("manager")) { // 呼叫管理者方法 } else { // 其它... } ... 若您事先無法決定Role名稱,則可以透過設置部署描述檔的<security-role-ref>,將程式中的Role名 稱,連結至實際部署時決定的Role名稱,例如在ejb-jar.xml中: <ejb-jar>
<enterprise-beans> <session> <ejb-name>HelloBean</ejb-name> <local>onlyfun.caterpillar.HelloBean</local> <ejb-class>onlyfun.caterpillar.HelloBeanImpl</ejb-class> <session-type>Stateless</session-type> <security-role-ref> <role-name>manager</role-name> <role-link>admin</role-link> </security-role-ref> </session> </enterprise-beans> <assembly-descriptor> <security-role> <role-name>admin</role-name> </security-role> ... <method-permission> <role-name>admin</role-name> <method> <ejb-name>HelloBean</ejb-name> <method-name>doSecurity</method-name> </method> </method-permission> .... </assembly-descriptor> </ejb-jar> 如此一來,您的程式中的manager,實際上就會對應至admin的Role名稱,如此,就不用擔心在程式中寫死Role名稱。 |