gpt4 book ai didi

hibernate - 在Custom AuthenticationProvider中找不到当前线程的 session

转载 作者:行者123 更新时间:2023-12-02 16:00:49 24 4
gpt4 key购买 nike

我是Grails的新手,正在尝试为安全性核心插件创建自己的AuthenticationProvider,问题是尝试返回 token 时出现跟随错误

无法获取当前的休眠 session ;嵌套的异常是org.hibernate.HibernateException:当前 session 找不到 session

这是我的AuthenticationProvider代码:

@Component
public class MyCustomAuthenticationProvider implements AuthenticationProvider {

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {

String name = authentication.getName();
String password = authentication.getCredentials().toString()
def User user
User.withTransaction {
status ->user = User.findByUsername(name);
if(! user.springSecurityService.isPasswordValid(user.getPassword(),password,null)){
throw new BadCredentialsException("Bad Credentials");
}

// Here comes the problem when I try to
return new UsernamePasswordAuthenticationToken(user, user.getPassword(), user.getAuthorities1()) ;
}
}




@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}

我的bean声明(在resources.groovy文件中)是:
beans = {
myCustomAuthenticationProvider (com.security.MyCustomAuthenticationProvider) {

}
}

最佳答案

可以肯定的是,user.getAuthorities1()调用是在 session 外部延迟加载的。

您需要在 session 关闭之前对其进行初始化。一种解决方案是用另一种方法初始化您的属性来替换User.findByUsername(name)调用。

关于hibernate - 在Custom AuthenticationProvider中找不到当前线程的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31274771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com