Let's go inside

          this blog is deprecated as a result of laziness.
          posts - 59, comments - 2, trackbacks - 0, articles - 0

          TrailBlazer第14天--Security

          Posted on 2006-07-28 19:19 Earth 閱讀(217) 評(píng)論(0)  編輯  收藏 所屬分類: JavaEE5/EJB3

          The password files? 密碼文件

          在任何的安全配置中,首先你得告訴應(yīng)用程序在哪里可以找到用戶名和密碼以及角色。你可以使用LDAP服務(wù)器和數(shù)據(jù)庫服務(wù)器來存儲(chǔ)這類的信息。最簡(jiǎn)單的情況是在應(yīng)用的classpath中使用簡(jiǎn)單的文本文件。下面是一個(gè)user.properties文件,它存儲(chǔ)的是用戶和密碼對(duì)。在這個(gè)例子中有兩個(gè)賬號(hào)分別為admin和user.

          admin=jboss
          user=ejb3
          下面是一個(gè)roles.properties文件。它存儲(chǔ)了用戶和角色之間的關(guān)系。每一個(gè)用戶都可以擁有多個(gè)角色。比如用戶admin就同時(shí)擁有AdminUser和RegularUser兩種角色。
          admin=AdminUser,RegularUser
          user=RegularUser

          The sample application? 示例程序
          ?作為一個(gè)例子,讓我們?cè)囍鲆粋€(gè)有密碼保護(hù)功能的投資計(jì)算器程序。為了使用這個(gè)計(jì)算器,你需要用user或者admin的身份登陸。我建議你此時(shí)還是使用user登陸(密碼是ejb3)

          RegularUser可以使用計(jì)算器,只有AdminUser有權(quán)增加更多的funds和investor profiles。所以,如果使用user登陸并嘗試運(yùn)行下面的兩個(gè)程序,你將遭遇安全異常。然后你可以試著以admin的身份再嘗試一遍(密碼是jboss)
          ?
          Security annotations? 安全標(biāo)注
          ?在EJB 3.0中, 你可以使用安全標(biāo)注來指定在哪里可以找到密碼/角色的列表,并且還可以指定哪種角色的用戶允許訪問這個(gè)方法。在下面的例子中,@SecurityDomain("other")表示在當(dāng)前classpath下的.properties文件 是用來認(rèn)證(authentication)的。@RolesAllowed表示哪些角色可以訪問這種方法。用@PermitAll標(biāo)注的方法則不受安全約束。

          @Stateless
          @SecurityDomain(
          " other " )
          public ? class ?SecureCalculator? implements ?Calculator?{
          ??@RolesAllowed({
          " AdminUser " })
          ??
          public ? void ?addFund?(String?name,? double ?growthrate)?{
          ????
          // ??
          ??}
          ??@RolesAllowed({
          " AdminUser " })
          ??
          public ? void ?addInvestor?(String?name,? int ?start,? int ?end)?{
          ????
          // ??
          ??}
          ??@PermitAll
          ??
          public ?Collection? < Fund > ?getFunds?()?{
          ????
          // ??
          ??}
          ??
          // ??
          ??@RolesAllowed({ " RegularUser " })
          ??
          public ? double ?calculate?( int ?fundId,? int ?investorId,?
          ???????????????????????????????????????
          double ?saving)?{
          ????
          // ??
          ??}
          }

          The web layer configuration? web層的配置
          ?如果你是通過web頁面登陸到系統(tǒng),你的身份則會(huì)被應(yīng)用的web層捕獲,然后傳遞到EJB 3.0的中間層。你不得不配置web.xml文件來聲明哪些頁面受密碼保護(hù)以及這些頁面允許哪些角色訪問。下面就是web.xml文件的內(nèi)容。

          < web-app >
          ??
          < display-name > EJB3Trail </ display-name >

          ??
          < security-constraint >
          ??????
          < web-resource-collection >
          ?????????
          < web-resource-name >
          ????????????The?Protected?Calculator
          ?????????
          </ web-resource-name >
          ?????????
          < url-pattern > services/security/addfund.jsp </ url-pattern >
          ?????????
          < url-pattern > services/security/addinvestor.jsp </ url-pattern >
          ?????????
          < url-pattern > services/security/calculator.jsp </ url-pattern >
          ??????
          </ web-resource-collection >

          ??????
          < auth-constraint >
          ?????????
          < role-name > AdminUser </ role-name >
          ?????????
          < role-name > RegularUser </ role-name >
          ??????
          </ auth-constraint >

          ??????
          < user-data-constraint >
          ?????????
          < transport-guarantee > NONE </ transport-guarantee >
          ??????
          </ user-data-constraint >
          ???
          </ security-constraint >

          ???
          < security-role >
          ??????
          < description > Authorized?to?access?everything. </ description >
          ??????
          < role-name > AdminUser </ role-name >
          ???
          </ security-role >
          ???
          < security-role >
          ??????
          < description > Authorized?to?limited?access. </ description >
          ??????
          < role-name > RegularUser </ role-name >
          ???
          </ security-role >

          ???
          < login-config >
          ??????
          < auth-method > FORM </ auth-method >
          ??????
          < form-login-config >
          ?????????
          < form-login-page > security/login.html </ form-login-page >
          ?????????
          < form-error-page > security/loginFailed.html </ form-error-page >
          ??????
          </ form-login-config >
          ???
          </ login-config >

          </ web-app >
          主站蜘蛛池模板: 福建省| 胶州市| 泽州县| 兴化市| 瑞昌市| 社会| 武汉市| 西吉县| 仪征市| 东方市| 佳木斯市| 德阳市| 东兴市| 临高县| 浏阳市| 马关县| 四会市| 上林县| 绍兴市| 阿尔山市| 航空| 吉木萨尔县| 西和县| 彝良县| 诸暨市| 迁安市| 永城市| 翁源县| 神池县| 无棣县| 乌鲁木齐县| 隆德县| 大安市| 新丰县| 玛沁县| 石柱| 寻甸| 高碑店市| 中阳县| 义乌市| 集安市|