无法找到authenticationTrustResolver.isAnonymous()的定义位置

时间:2013-11-30 20:44:58

标签: grails groovy spring-security

我正在浏览SpringSecurityService.groovy文件(grails.plugins.springsecurity包的一部分)。他们有一些代码让我感到困惑。

import javax.servlet.http.HttpServletRequest
import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
import org.springframework.security.core.Authentication
import org.springframework.security.core.context.SecurityContextHolder as SCH
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource

class SpringSecurityService {

    /** dependency injection for authenticationTrustResolver */
    def authenticationTrustResolver

....
....

    boolean isLoggedIn() {
        def authentication = SCH.context.authentication
        authentication && !authenticationTrustResolver.isAnonymous(authentication)
    }

....

这些是文件中提到authenticationTrustResolver的所有位置。我的问题是,authenticationTrustResolver.isAnonymous()定义在哪里?我查看了导入的文件,但它似乎没有在那里。我认为这个功能可能给我带来了一些麻烦,但我不知道怎么看它的代码。

1 个答案:

答案 0 :(得分:3)

例如,Grails在Services,Controllers和TagLibs中使用依赖注入的概念。这意味着您可以声明一个属性(在本例中为authenticationTrustResolver),当您使用服务实例时,您的依赖项实例已经存在。

Grails plugins有一个特殊的类,其中包含插件的名称,您可以在其中声明此依赖项。该名称始终以GrailsPlugin.groovy结尾,因此在这种情况下为SpringSecurityCoreGrailsPlugin

doWithSpring闭包中,插件定义了他的bean:

def doWithSpring = {
  ...
  /** authenticationTrustResolver */
  authenticationTrustResolver(AuthenticationTrustResolverImpl) {
    anonymousClass = conf.atr.anonymousClass
    rememberMeClass = conf.atr.rememberMeClass
  }
  ...
}

您可以查看有关Grails and Spring in the docs

的更多信息
相关问题