Spring Boot — Jwts.builder Невозможно разрешить метод «signWith()»JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Boot — Jwts.builder Невозможно разрешить метод «signWith()»

Сообщение Anonymous »

Я следил за этим руководством по Spring Boot + Angular на YouTube, в котором для аутентификации пользователя используются Spring Security и веб-токены JSON (JWT). Однако в видео я подошел к моменту, когда у меня возникла ошибка в классе jwtUtil2. По какой-то причине всякий раз, когда я пытаюсь запустить свое Spring-приложение, я получаю эту ошибку:

Код: Выделить всё

Error:(41, 17) java: no suitable method found for signWith(java.security.PrivateKey)
method io.jsonwebtoken.JwtBuilder.signWith(io.jsonwebtoken.SignatureAlgorithm,byte[]) is not applicable
(actual and formal argument lists differ in length)
method io.jsonwebtoken.JwtBuilder.signWith(io.jsonwebtoken.SignatureAlgorithm,java.lang.String) is not applicable
(actual and formal argument lists differ in length)
method io.jsonwebtoken.JwtBuilder.signWith(io.jsonwebtoken.SignatureAlgorithm,java.security.Key) is not applicable
(actual and formal argument lists differ in length)
Кроме того, если я посмотрю на класс jwtUtil2, то у него появится красная линия под параметром, который передается методу Jwts.builder().signWith() в строке 41. Если я наведу указатель мыши на ошибку, он скажет: Невозможно разрешить метод 'signWith(java.security.PrivateKey)'.

Код: Выделить всё

@Service
public class JwtUtilTwo
{
private KeyStore keyStore;

@PostConstruct
public void init() {
try
{
keyStore = KeyStore.getInstance("JKS");
InputStream resourceAsStream = getClass().getResourceAsStream("/springblog.jks");
keyStore.load(resourceAsStream, "secret".toCharArray());
}
catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e)
{
throw new SpringRubbishRewardsException("Exception occurred while loading keystore");
}
}

public String generateToken(Authentication authentication) {
User principal = (User) authentication.getPrincipal();
return Jwts.builder()
.setSubject(principal.getUsername())
.signWith(getPrivateKey()) //ERROR HERE
.compact();
}

private PrivateKey getPrivateKey()
{
try
{
return (PrivateKey) keyStore.getKey("springblog", "secret".toCharArray());
}
catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException e)
{
throw new SpringRubbishRewardsException("Exception occurred while retrieving public key from keystore");
}
}
}
Теперь я действительно нашел способ исправить ошибку, изменив зависимости Maven в pom-файле. Я просмотрел репозиторий GitHub руководства YouTube для видео, скопировал следующие зависимости JWT и закомментировал исходную зависимость JWT:

Код: Выделить всё

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

rubbish-rewards
rubbish-rewards-api
1.0-SNAPSHOT


org.springframework.boot
spring-boot-starter-parent
2.3.0.RELEASE




org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-starter-data-jpa



mysql
mysql-connector-java
runtime



org.springframework.boot
spring-boot-starter-security







io.jsonwebtoken
jjwt-api
0.10.5


io.jsonwebtoken
jjwt-impl
runtime
0.10.5


io.jsonwebtoken
jjwt-jackson
runtime
0.10.5





javax.xml.bind
jaxb-api
2.3.0




Хотя это устраняет первую проблему, при попытке запустить приложение возникает новая проблема. На этот раз есть ошибка следующего содержания:

Код: Выделить всё

2020-07-14 11:52:35.833  WARN 14616 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authenticateController': Unsatisfied dependency expressed through field 'authenticateService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authenticateService': Unsatisfied dependency expressed through field 'jwtUtil2'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtUtilTwo': Invocation of init method failed; nested exception is rubbishrewards.exceptions.SpringRubbishRewardsException: Exception occurred while loading keystore
Я бы разместил код в своих классах аутентификацииController и AuthenticationService, но мне кажется, что это сделает этот вопрос слишком загроможденным. Вместо этого вот ссылка на репозиторий моих приложений на GitHub.
Вот ссылка на руководство YouTube (с отметкой времени) и ссылка на видеоролики, сопровождающие репозиторий GitHub.
Я новичок в Spring, поэтому понятия не имею, что происходит. Если кто-нибудь сможет помочь, буду признателен.

Подробнее здесь: https://stackoverflow.com/questions/628 ... d-signwith
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»