单元测试没有问题,但问题将出现在拦截器中
由: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)
...
}
另一方面,您的代码应该可以工作。我认为您的包结构(组件扫描(有问题。参考:构建您的代码
工作简化演示在这里