0

Spring Security (AKA Acegi) プラグインによって提供される注釈を使用しています。注釈が付けられたコントローラーアクションがあります

@Secured(['ROLE_ADMIN', 'ROLE_USER'])

管理者と通常のユーザーが利用できるようにする必要があることを示します。しかしここで、管理者と未登録ユーザーがアクションを利用できることを示す必要があります。アノテーションを使用して、役割のないユーザー、つまり未登録のユーザーを示すことはできますか?

ありがとう、ドン

4

2 に答える 2

2

そのトークンはIS_AUTHENTICATED_ANONYMOUSLYで、ログインしているかどうかに関係なく誰でも意味します。IS_AUTHENTICATED_REMEMBEREDは、remember-me Cookieを使用して、または明示的なログインを介してログインした人を意味し、IS_AUTHENTICATED_FULLYは、明示的なログインを介して(Cookieを使用せずに)ログインしたことを意味します。

アクションに注釈を付ける場合

@Secured(['IS_AUTHENTICATED_ANONYMOUSLY'])

そうすれば、誰でもそのアクションにアクセスできるようになります。これらの特別なトークンをロールと組み合わせることができます。たとえば、管理者のみを許可し、ユーザーが使用する覚えているCookieを持っている場合でも、ユーザー名/パスワードのログインを強制します。

@Secured(['ROLE_ADMIN', 'IS_AUTHENTICATED_FULLY'])
于 2010-01-26T01:43:45.070 に答える
2

ログインしていないこと、または ROLE_ADMIN を持っていることを必要とする解決策を次に示します。新しい「IS_NOT_AUTHENTICATED」トークンを処理するカスタム ボーターが必要です。

package com.burtbeckwith.grails.springsecurity

import org.springframework.security.Authentication
import org.springframework.security.AuthenticationTrustResolverImpl
import org.springframework.security.ConfigAttribute
import org.springframework.security.ConfigAttributeDefinition
import org.springframework.security.vote.AccessDecisionVoter

class NotLoggedInVoter implements AccessDecisionVoter {

   private authenticationTrustResolver = new AuthenticationTrustResolverImpl()

   int vote(Authentication authentication, object, ConfigAttributeDefinition config) {
      for (configAttribute in config.configAttributes) {
         if (supports(configAttribute)) {
            if (authenticationTrustResolver.isAnonymous(authentication)) {
               // allowed if not logged in
               return ACCESS_GRANTED
            }
            for (authority in authentication.authorities) {
               if ('ROLE_ADMIN' == authority.authority) {
                  // allowed if logged in as an admin
                  return ACCESS_GRANTED
               }
            }
         }
      }

      return ACCESS_DENIED
   }

   boolean supports(ConfigAttribute attribute) {
      'IS_NOT_AUTHENTICATED' == attribute?.attribute
   }

   boolean supports(Class clazz) {
      true
   }
}

これを Bean として resources.groovy に登録します。

beans = {
   notLoggedInVoter(com.burtbeckwith.grails.springsecurity.NotLoggedInVoter)
}

「decisionVoterNames」プロパティを設定して、SecurityConfig.groovy の投票者リストに追加します。

decisionVoterNames = ['notLoggedInVoter', 'authenticatedVoter', 'roleVoter']

これでコントローラーアクションに注釈を付けます:

@Secured(['IS_NOT_AUTHENTICATED'])

認証されていないユーザーと、ROLE_ADMIN を持つ認証済みユーザーのみを許可します。

于 2010-01-26T07:45:02.557 に答える