spring-boot - loadUserByUsername 不会覆盖 springboot 身份验证中的任何内容
问题描述
我是微服务的新手。我想从另一个服务是用户注册服务访问用户名(电子邮件)和密码。当我创建身份验证服务并尝试访问电子邮件密码时,我收到编译时错误。
e: E:\Nil Projects\NewMicroService\security-service\src\main\kotlin\com\security\securityservice\service\JwtUserDetailsService.kt: (16, 5): 'loadUserByUsername' overrides nothing
这是我的代码 jwtuserdetailsservice.kt
package com.security.securityservice.service
import com.security.securityservice.UserRepository
import com.security.securityservice.entity.User
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.userdetails.UsernameNotFoundException
import org.springframework.stereotype.Service
@Service
class JwtUserDetailsService {
@Autowired
private lateinit var userDTO:UserRepository
@Throws(Exception::class)
override fun loadUserByUsername(email: String?): UserDetails {
val user: User =userDTO.findUserByEmail(email)
if (userDTO == null){
UsernameNotFoundException("your email id doesn't exist" + email)
}
return org.springframework.security.core.userdetails.User(user.userId.email,user.userId.password,ArrayList())
}
}
上面我定义了 user.userId.email 和 user.userId.password 因为我在我的 User.kt 中定义了 userId 。这个 userId 来自 userRegistration-service,这个 id 包含用户名和密码,但我无法在身份验证服务中访问电子邮件和密码我在这个特定点收到错误“return org.springframework.security.core.userdetails.User( user.userId.email,user.userId.password,ArrayList())"
用户.kt
package com.security.securityservice.entity
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id
@Entity
data class User(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
val userAuthId:Long=-1,
val otp:Int=0,
val token:String="",
var userId:Long=-1,
)
响应模板.kt
package com.security.securityservice.VO
import com.security.securityservice.entity.User
data class ResponseTemplate(
val user:User?=null,
val userRegistration: UserRegistration?=null,
)
用户注册.kt
package com.security.securityservice.VO
data class UserRegistration(
val userId:Long=-1,
val firstName:String="",
val lastName:String="",
val email:String="",
)
解决方案
这与微服务无关,而是与简单的 OOP 编程有关。当您说子类override
某些行为时,它之前必须有一个,在您的情况下是无。仔细查看类的定义,JwtUserDetailsService
没有父类/没有任何接口,因此没有什么可以覆盖的。所以线
override fun loadUserByUsername(email: String?): UserDetails {
永远不会编译。我认为您应该在这里实现*接口以提供行为UserDetailsService
。您会看到它loadUserByUsername
来自接口User
DetailsService 现在代码可以编译,但为了使身份验证正常工作,您必须与身份验证管理器正确集成。
推荐阅读
- javascript - Var 变量是否会从 IIFE 中取出?
- node.js - 使用 Mongoose .find() 在 EJS 模板中渲染数据
- python - 在另一个目录中导入脚本时出现导入错误
- excel - 使用 vba 根据下拉菜单创建唯一表
- postgresql - 在 Postgresql 中随时间窗口查询的最佳方法
- sql - 递归有条件地获取父ID
- python - 如何在没有嵌套在 Django REST 框架中的情况下获取关联模型?
- python - 程序运行时未创建 PDF 文件
- php - VS Code 中的远程 XDebug - 调用堆栈中的多个请求
- c# - 如何获取 proto 文件以引用另一个 proto 中定义的消息?