在单元测试中没有问题,但问题会出现在拦截器中



单元测试没有问题,但问题将出现在拦截器中

由:kotlin引起。UninitializedPropertyAccessException:lateinit属性us尚未初始化

@Component
class MyInterceptor : HandlerInterceptor {
@Autowired
lateinit var us:UserRepository
override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Boolean {
val token = request.getHeader("token")

val userId = JWT.decode(token).audience[0]
val pwd = us.findByUsername(userId)
pwd?.password.println()
val r = pwd?.password?.let { verifyToken(it, token) }
return true
}
@Repository
interface UserRepository : BaseRepository<MyUser> {
fun findByUsername(username: String): MyUser?
}
@NoRepositoryBean
interface BaseRepository<T> : JpaRepository<T, String>,
JpaSpecificationExecutor<T>,
CrudRepository<T, String> {
}

通过使用构造函数注入,可以轻松避免lateinit属性xxx尚未初始化

类似:


@Component
class MyInterceptor(private val userRepository:UserRepository) : HandlerInterceptor {

override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Boolean {
...
userRepository.findByUsername(userId)
...
}

另一方面,您的代码应该可以工作。我认为您的包结构(组件扫描(有问题。参考:构建您的代码

工作简化演示在这里

最新更新