【转自】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