Spring Boot 找不到 Bean
我在尝试使用标记化启动 Spring Boot 应用程序时遇到问题。这是我的服务类:
@Service
@Slf4j
public class JwtTokenService {
private final JwtConfig jwtConfig;
public JwtTokenService(JwtConfig jwtConfig) {
this.jwtConfig = jwtConfig;
}
public String generateToken(Authentication authentication) {
Long now = System.currentTimeMillis();
return Jwts.builder()
.setSubject(authentication.getName())
.claim("authorities", authentication.getAuthorities().stream()
.map(GrantedAuthority::getAuthority).collect(Collectors.toList()))
.setIssuedAt(new Date(now))
.setExpiration(new Date(now + jwtConfig.getExpiration() * 1000))
.signWith(SignatureAlgorithm.HS512, jwtConfig.getSecret().getBytes())
.compact();
}
}
这是我的配置类:
@Data
@NoArgsConstructor
@Component
public class JwtConfig {
@Value("${security.jwt.uri:/auth/**}")
private String Uri;
@Value("${security.jwt.header:Authorization}")
private String header;
@Value("${security.jwt.prefix:Bearer }")
private String prefix;
@Value("${security.jwt.expiration:#{24*60*60}}")
private int expiration;
@Value("${security.jwt.secret:JwtSecretKey}")
private String secret;
}
当我尝试运行我的应用程序时,出现以下错误:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in services.JwtTokenService required a bean of type 'config.JwtConfig' that could not be found.
Action:
Consider defining a bean of type 'config.JwtConfig' in your configuration.
我不明白为什么会出现此错误。
I have a problem when trying to start my Spring Boot application with tokenization. This is my service class:
@Service
@Slf4j
public class JwtTokenService {
private final JwtConfig jwtConfig;
public JwtTokenService(JwtConfig jwtConfig) {
this.jwtConfig = jwtConfig;
}
public String generateToken(Authentication authentication) {
Long now = System.currentTimeMillis();
return Jwts.builder()
.setSubject(authentication.getName())
.claim("authorities", authentication.getAuthorities().stream()
.map(GrantedAuthority::getAuthority).collect(Collectors.toList()))
.setIssuedAt(new Date(now))
.setExpiration(new Date(now + jwtConfig.getExpiration() * 1000))
.signWith(SignatureAlgorithm.HS512, jwtConfig.getSecret().getBytes())
.compact();
}
}
This is my config class:
@Data
@NoArgsConstructor
@Component
public class JwtConfig {
@Value("${security.jwt.uri:/auth/**}")
private String Uri;
@Value("${security.jwt.header:Authorization}")
private String header;
@Value("${security.jwt.prefix:Bearer }")
private String prefix;
@Value("${security.jwt.expiration:#{24*60*60}}")
private int expiration;
@Value("${security.jwt.secret:JwtSecretKey}")
private String secret;
}
And I get the following error when I try to run my Application:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in services.JwtTokenService required a bean of type 'config.JwtConfig' that could not be found.
Action:
Consider defining a bean of type 'config.JwtConfig' in your configuration.
I dont understand why i get this error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我解决了。问题是我的 Spring Boot 应用程序没有扫描配置所在的包。在我的 @SpringBootApplication 中,我添加了 @ComponentScan 和 JwtConfig 所在的包。
I solved it. The problem was that the package where the config lays was not scanned by my spring boot application. In my @SpringBootApplication I added @ComponentScan with the package where JwtConfig lays.