Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于JWTTokenProvider,我无法注入PasswordEncoder类_Java_Spring Boot_Spring Security_Dependency Injection_Jwt - Fatal编程技术网

Java 由于JWTTokenProvider,我无法注入PasswordEncoder类

Java 由于JWTTokenProvider,我无法注入PasswordEncoder类,java,spring-boot,spring-security,dependency-injection,jwt,Java,Spring Boot,Spring Security,Dependency Injection,Jwt,我正在编写一个RESTMVC应用程序。我正在使用SpringBoot和Hibernate。为了保护,我决定将Spring安全性和JWT添加到项目中 我使用BCryptEncoder对密码进行编码。因此,我将它作为bean放在JWTTokenProvider类中。我需要将PasswordEncoder注入UserService类,但我不能。我明白原因,但我不知道如何解决它 UserSevice: @RequiredArgsConstructor @服务 公共类用户服务{ 私有最终用户存储库用户存储

我正在编写一个RESTMVC应用程序。我正在使用SpringBoot和Hibernate。为了保护,我决定将Spring安全性和JWT添加到项目中

我使用
BCryptEncoder
对密码进行编码。因此,我将它作为bean放在
JWTTokenProvider
类中。我需要将
PasswordEncoder
注入
UserService
类,但我不能。我明白原因,但我不知道如何解决它

UserSevice

@RequiredArgsConstructor
@服务
公共类用户服务{
私有最终用户存储库用户存储库;
私有最终用户映射器用户映射器;
专用最终密码编码器;密码编码器;
public UserDTO注册(RegistrationUserDTO RegistrationUserDTO){
用户=新用户();
user.setName(registrationUserDTO.getName());
user.setLastName(registrationUserDTO.getLastName());
user.setLogin(registrationUserDTO.getLogin());
user.setMail(registrationUserDTO.getMail());
user.setPassword(passwordEncoder.encode(registrationUserDTO.getPassword());
user.setRole(Role.CUSTOMER);
userRepository.save(用户);
返回userMapper.userToUserDTO(用户);
}
}
JwtTokenProvider

@RequiredArgsConstructor
@组成部分
公共类JwtTokenProvider{
//田地
//
私有最终用户详细信息服务用户详细信息服务;
@值(${jwt.token.secret}”)
私人字符串秘密;
@值(${jwt.token.expired}”)
私有长有效性;
//方法
//
@豆子
公共BCryptPasswordEncoder passwordEncoder(){
返回新的BCryptPasswordEncoder(8);
}
@施工后
受保护的void init(){
secret=Base64.getEncoder().encodeToString(secret.getBytes());
}
/**
*
*@param登录
*@param角色
*@return砦砦砦砦砦砦砦砦砦
*/
公共字符串createToken(字符串登录,角色){
Claims Claims=Jwts.Claims().setSubject(登录);
claims.put(“roles”,role.name());
现在日期=新日期();
日期有效期=新日期(now.getTime()+validityInMillics);
返回Jwts.builder()
.setClaims(索赔)
.setIssuedAt(现在)
.setExpiration(有效期)
.signWith(SignatureAlgorithm.HS256,秘密)
.compact();
}
公共身份验证getAuthentication(字符串令牌){
UserDetails UserDetails=this.userDetailsService.loadUserByUsername(getLogin(令牌));
返回新的UsernamePasswordAuthenticationToken(userDetails,“,userDetails.getAuthories());
}
公共字符串getLogin(字符串令牌){
返回Jwts.parser();
}
公共布尔validateToken(字符串标记){
试一试{
Jws claims=Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
return!claims.getBody().getExpiration().before(new Date());
}捕获(JwtException | IllegalArgumentException e){
抛出新的JwtAuthenticationException(“JWT令牌已过期或无效”);
}
}
/**
*
*@param-req
*@returnbearertoken
*/
公共字符串解析令牌(HttpServletRequest请求){
字符串bearerToken=req.getHeader(“授权”);
if(bearerToken!=null&&bearerToken.startsWith(“Bearer”)){
返回承载子串(7);
}
返回null;
}
}
jwtuserdetails服务

@Slf4j
@服务
@所需参数构造函数
公共类JwtUserDetailsService实现UserDetailsService{
专用最终用户服务用户服务;
@凌驾
public UserDetails loadUserByUsername(字符串登录)引发UsernameNotFoundException{
User=userService.findByLogin(登录名);
JwtUser JwtUser=JwtUserFactory.create(用户);
info(“在loadUserByUsername中-登录名为:{}的用户成功加载”,登录名);
返回jwtUser;
}
}
日志:

2020-08-20 11:59:44.964警告15396-[main]ConfigServletWebServerApplicationContext:在上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建文件中定义了名称为“securityConfig”的bean时出错[D:\JetBrainsProjects\Coffeetearea\build\classes\java\main\ru\Coffeetearea\config\SecurityConfig.class]:通过构造函数参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.UnsatifiedPendencyException:创建文件中定义的名为“jwtTokenProvider”的bean时出错[D:\JetBrainsProjects\Coffeetearea\build\classes\java\main\ru\Coffeetearea\security\jwt\JwtTokenProvider.class]:通过构造函数参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.UnsatifiedDependencyException:创建文件中定义的名为“jwtUserDetailsService”的bean时出错[D:\JetBrainsProjects\Coffeetearea\build\classes\java\main\ru\Coffeetearea\security\JwtUserDetailsService.class]:通过构造函数参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.UnsatifiedPendencyException:创建文件中定义的名为“userService”的bean时出错[D:\JetBrainsProjects\Coffeetearea\build\classes\java\main\ru\Coffeetearea\service\UserService.class]:通过构造函数参数2表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.beancurrentlyIncrementException:创建名为“jwtTokenProvider”的bean时出错:请求的bean当前正在创建中:是否存在无法解析的循环引用?
2020-08-20 11:59:44.964信息15396---[main]j.LocalContainerEntityManagerFactoryBean:关闭JPA实体