authenticationTrustResolver

authenticationTrustResolver

我一直在浏览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()在哪里定义?我已经查看了导入的文件,但似乎不在其中。我认为该功能可能会给我带来一些麻烦,但我不知道如何查看其代码。

最佳答案

例如,Grails在服务, Controller 和TagLib中使用了依赖注入(inject)的概念。这意味着您可以声明一个属性(在本例中为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的更多信息。

09-26 20:50