在应用程序启动时登录用户

时间:2018-06-30 12:35:43

标签: spring grails spring-security bootstrapping

我正在使用最新的Grails和spring安全插件。我想在应用程序启动时登录预定义的来宾用户,但不确定如何实现。

  1. 如何以编程方式登录用户? (我正在引导程序中尝试此操作,但是找不到要为AuthToken类导入的内容)
  2. 这是哪里做得最好的-即在引导配置中?

1 个答案:

答案 0 :(得分:0)

好吧,我找到了一个解决方案……这还很原始,我不确定这是应用程序启动时最好的解决方法,但是它实现了我想要的。

因此在Bootstrap文件中,我实现了以下内容:

这是我的进口商品:-

import grails.plugin.springsecurity.rest.token.AccessToken
import grails.plugin.springsecurity.rest.token.generation.TokenGenerator
import org.springframework.security.authentication.AuthenticationManager
import org.springframework.security.authentication.BadCredentialsException
import org.springframework.security.core.Authentication
import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.security.core.userdetails.UserDetails

...在我的用户全部启动后,我想自动登录Guest用户,然后也生成JWT刷新和访问令牌...

    /* Login in guest user on application startup */
    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("guest", "guest");
    token.setDetails(tttGuest);
    try {
        //doing actual authentication
        Authentication auth = authenticationManager.authenticate(token);
        log.debug("Login succeeded!");
        //setting principal in context
        SecurityContextHolder.getContext().setAuthentication(auth);

        //Generate JWT access token and refresh token
        AccessToken accessToken = tokenGenerator.generateAccessToken(springSecurityService.principal as UserDetails)

        return true
    } catch (BadCredentialsException e) {
        log.debug("Login failed")
        return false
    }

剩下要做的唯一一件事就是弄清楚如何将令牌传达回客户端应用程序。