【发布时间】:2019-05-30 19:53:29
【问题描述】:
我正在 Spring boot rest 中使用 JWT 进行 API 身份验证功能,但遇到以下错误:
说明:
构造函数的参数0 com.icfer.huxy.icfer.controller.UserController 需要一个 bean 类型 'com.icfer.huxy.icfer.service.ApplicationUserRepository' 可以 找不到。
动作:
考虑定义一个 bean 类型 'com.icfer.huxy.icfer.service.ApplicationUserRepository' 在你的 配置。
以下是我对ApplicationUserRepository 和UserController 类的实现。
ApplicationUserRepository.java
import com.icfer.huxy.icfer.model.ApplicationUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;
public interface ApplicationUserRepository extends JpaRepository<ApplicationUser, Long> {
ApplicationUser findByUsername(String username);
}
ApplicationUser.java
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class ApplicationUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String username;
private String password;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserController.java
import com.icfer.huxy.icfer.model.ApplicationUser;
import com.icfer.huxy.icfer.service.ApplicationUserRepository;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/users")
public class UserController {
private ApplicationUserRepository applicationUserRepository;
private BCryptPasswordEncoder bCryptPasswordEncoder;
public UserController(ApplicationUserRepository applicationUserRepository,
BCryptPasswordEncoder bCryptPasswordEncoder) {
this.applicationUserRepository = applicationUserRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
@PostMapping("/sign-up")
public void signUp(@RequestBody ApplicationUser user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
applicationUserRepository.save(user);
}
}
我的 gradle 文件如下:
dependencies {
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
implementation('org.springframework.boot:spring-boot-starter-security')
implementation('org.springframework.boot:spring-boot-starter-web')
compile("com.auth0:java-jwt:3.4.0")
runtimeOnly('mysql:mysql-connector-java')
testImplementation('org.springframework.boot:spring-boot-starter-test')
testImplementation('org.springframework.security:spring-security-test')
}
以下是我的项目的链接: Github link
【问题讨论】:
-
与其在文本中转储孤立的代码,不如分享一个我们可以实际运行的示例(在您的 github 存储库中)更有效。那里的源代码缺少控制器所在的包,Spring Boot 应用程序所在的包,组件扫描配置(如果有)。所以,在某种程度上,所有这些细节恐怕都毫无用处。
-
@StephaneNicoll,你是对的,但出于隐私的考虑,我现在不能这样做。
-
也许让我在这种情况下做一个快速的小项目,我分享一个 github 链接。 @StephaneNicoll
-
这是链接@StephaneNicoll,github.com/huxaiphaer/icfer
标签: java mysql spring-boot jwt