Grails Spring Security Core插件–注册回调关闭

我正在寻找一种使用Spring Security Core插件成功登录用户后挂钩业务逻辑的方法。 最简单的方法是注册回调闭包。 它让您在某些Spring Security事件发生后将自定义代码挂接到Config.groovy中

如果您不熟悉此插件,请访问关于Spring Security Core插件的上一教程

注册回调关闭

当您想在某些Spring Security Core事件上挂接业务逻辑时,可以编辑grails-app / conf / Config.groovy并添加如下内容:

grails.plugins.springsecurity.useSecurityEventListener = true

grails.plugins.springsecurity. onInteractiveAuthenticationSuccessEvent = { e, appCtx -> 
  // add custom code here
}

grails.plugins.springsecurity. onAbstractAuthenticationFailureEvent = { e, appCtx -> 
  // add custom code here
}

grails.plugins.springsecurity. onAuthenticationSuccessEvent = { e, appCtx -> 
  // add custom code here
}

grails.plugins.springsecurity. onAuthenticationSwitchUserEvent = { e, appCtx -> 
  // add custom code here
}

grails.plugins.springsecurity. onAuthorizationEvent = { e, appCtx ->
  // add custom code here
}

使用此功能时,如上面第一行所示,将grails.plugins.springsecurity.useSecurityEventListener设置为true很重要。

根据插件文档中的文档

  • 当用户进行身份验证时,Spring Security最初会启动AuthenticationSuccessEvent(onAuthenticationSuccessEvent回调)。 在Authentication在SecurityContextHolder中注册之前,将触发此事件,这意味着访问已登录用户的springSecurityService方法将不起作用。
  • 在稍后的处理中,将触发第二个事件,即InteractiveAuthenticationSuccessEvent(onInteractiveAuthenticationSuccessEvent回调),当发生这种情况时,SecurityContextHolder将具有身份验证。
  • 这意味着,如果您不需要检索已登录的用户,则可以连接到onAuthenticationSuccessEvent 。 否则,请与onInteractiveAuthenticationSuccessEvent挂钩。

本示例将所有成功的登录记录到数据库表中。

模型

我认为用户的模型是SecUser所讨论这里

日志将保存在SecUserLog数据模型中。

class SecUserLog {
  String username
  String action

  static constraints = {
    username blank: false, nullable: false
    action blank: false, nullable: false
  }
}

44

服务

我创建了一个服务,用于将所有业务逻辑包装到SecUserLog域。 我使用了一项服务,稍后展示如何在Config.groovy中访问它。

class SecUserLogService {
  static transactional = true
  def securityService

  def addUserLog(String action) {
    SysUser user = securityService.getLoggedUser()
    SysUserActionLog log = new SysUserActionLog(username:user.username, action:action)
    log.save()
  }
}

请注意,服务securityService来自Spring Security Core插件。

Config.groovy条目

这是我在Config.groovy中添加的代码:

grails.plugins.springsecurity.useSecurityEventListener = true

grails.plugins.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
  def secUserLogService = appCtx.getBean('secUserLogService')
  secUserLogService.addUserLog("login")
}

appCtx对象是应用程序上下文,可用于查找包含服务的Spring托管Bean。 之后,您可以随意使用该服务。

翻译自: https://www.javacodegeeks.com/2014/12/grails-spring-security-core-plugin-registering-callback-closures.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值