我是 Spring 和 Kotlin 的新手,正在嘗試使用自定義成功處理程式實作 OAuth2。在處理程式中,我想將用戶詳細資訊保存到我的 MongoDB 資料庫中。這是我的安全配置(AuthenticationSuccessHandler 被注入到建構式中):
@EnableWebSecurity
@Configuration
public class SecurityConfig(private val authenticationSuccessHandler : AuthenticationSuccessHandler) {
@Throws(Exception::class)
@Bean
public fun override(http: HttpSecurity): SecurityFilterChain {
return http
.csrf{csrf -> csrf.disable()}
.authorizeRequests{auth ->
auth.antMatchers("/api/brackets").authenticated()
auth.antMatchers("/**").permitAll()
}
.oauth2Login()
.successHandler(AuthenticationSuccessHandler())
.and()
.build()
}
}
這是我的 AuthenticationSuccessHandler 類(參見 autowired userRepository):
@Component
public class AuthenticationSuccessHandler : SavedRequestAwareAuthenticationSuccessHandler() {
private val redirectStrategy : RedirectStrategy = DefaultRedirectStrategy();
private val logger : Logger = LoggerFactory.getLogger(javaClass)
@Autowired
private lateinit var userRepository : UserRepository
@Throws(ServletException::class,IOException::class)
override public fun onAuthenticationSuccess(request : HttpServletRequest, response : HttpServletResponse, authentication : Authentication) {
//if redirected from some specific url, need to remove the cachedRequest to force use defaultTargetUrl
val requestCache : RequestCache = HttpSessionRequestCache();
val savedRequest : SavedRequest = requestCache.getRequest(request, response);
val userDetails : DefaultOidcUser = authentication.getPrincipal() as DefaultOidcUser
logger.info(userDetails.getIdToken().getTokenValue())
userRepository.save(User(userDetails.getName(), userDetails.getEmail(), AuthService.GOOGLE))
redirectStrategy.sendRedirect(request, response, "/api/testAuth");
}
}
不幸的是,當這個處理程式被命中時,保存新用戶的陳述句失敗并顯示訊息:“kotlin.UninitializedPropertyAccessException:lateinit 屬性 userRepository 尚未初始化”
任何想法為什么我的 userRepository 沒有被注入?太感謝了!
uj5u.com熱心網友回復:
看起來問題是我沒有使用我注入的 authenticationSuccessHandler 實體,而是在不使用 spring 框架的情況下實體化一個新實體。我可以通過更改依賴注入起作用的原因.successHandler(AuthenticationSuccessHandler())來解決此問題.successHandler(authenticationSuccessHandler)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521735.html
