【转自】http://caterpillar.onlyfun.net/Gossip/JSPServlet/JSPServlet.htm
雖 是所謂的編程式安全,不過還是搭配之前所談及的宣告安全環境設定來達成,您可以從HttpServletRequest的 getUserPrincipal()來取得代表登入使用者的Principal,或是使用getRemoteUser()方法來取得登入的使用者名稱。
一個搭配Role設定的方法是isUserInRole(),若您的使用者已經通過驗證,可以藉由這個方法於程式中判定登入的使用者其Role為何,並進 一步決定可使用的資源,像是可以決定使用者是否出現進階使用者選單、試用帳號是否過期之類,這是單純對URL作防護的設定所無法達到的,例如:
...
if(request.isUserInRole("manager")) {
// 顯示管理者選單
}
else {
// 顯示一般使用者選單
}
...
若您事先無法決定Role名稱,則可以透過設置<security-role-ref>,將程式中的Role名稱,連結至 <security-role>的Role名稱,例如:
...
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>onlyfun.caterpillar.HelloServlet</servlet-class>
<security-role-ref>
<role-name>manager</role-name>
<role-link>admin</role-link>
</security-role-ref>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
<security-role>
<role-name>admin</role-name>
<role-name>normal</role-name>
</security-role>
...
如此一來,您的程式中的manager,實際上就會對應至admin的Role名稱,如此,就不用擔心在程式中寫死Role名稱。
文章来源:
http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!789.entry