У меня есть проект Gradle Spring Boot, и в зависимостях build.gradle я импортирую веб-токен JSON как:
compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.2'
Следуя Spring Security и видеоуроку, я создал успешный метод аутентификации. Однако, когда я использую Jwts в этом методе, он не предлагает мне импортировать тот же файл, что и в видеоуроке, и фактически не предлагает никаких параметров импорта. В частности, в видео (в котором используется Maven) добавлено приглашение для импорта:
import io.jsonwebtoken
Тем не менее, в моем приложении мне никогда не предлагалась эта опция и я не импортирую ее вручную или как import io.jsonwebtoken. *; не работает. Как указывает класс, что:
import io cannot be resolved
Точно так же метод SignatureAlgorithm не содержит импорта из JWT.
Как я могу успешно импортировать веб-токен JSON в мой проект gradle (или, по крайней мере, импортировать io). Метод из видеоурока ниже. Jwts - это реализация веб-токена, и это пакет, с которым у меня возникли трудности.
@Override
protected void successfulAuthentication(HttpServletRequest req,
HttpServletResponse res,
FilterChain chain,
Authentication auth) throws IOException, ServletException {
String userName = ((User) auth.getPrincipal()).getUsername();
String token = Jwts.builder()
.setSubject(userName)
.setExpiration(new Date(System.currentTimeMillis() + SecurityConstants.EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SecurityConstants.TOKEN_SECRET)
.compact();
res.addHeader(SecurityConstants.HEADER_STRING, SecurityConstants.TOKEN_PREFIX + token);
}
Сам проект, который я собираю, находится на Github, а упомянутый выше класс находится по адресу:
да, это тот класс, о котором я говорю github.com/jwolfe890/SpringBootProject1/blob/master/src/main /…
@Dog, пожалуйста, проверьте и объедините, я внес необходимые изменения в ваш проект: github.com/jwolfe890/SpringBootProject1/pull/1




Итак, у меня возникла проблема, вы должны использовать 0,2 вместо 0,2.0
Для gradle 4.10 было бы хорошо использовать реализацию вместо компиляции.
implementation('io.jsonwebtoken:jjwt:0.2')
Это тоже не сработало. Изначально у меня он был как .2, но изменил его, когда пробовал разные версии. Я думаю, что это может иметь какое-то отношение к пути сборки, но его очистка и повторный запуск Spring Tool Suite не помогли.
у меня работает с compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.2' или implementation('io.jsonwebtoken:jjwt:0.2'). попробуй сделать ./gradlew clean build --refresh-dependencies
теперь он сообщает мне: «Ошибка: не удалось найти или загрузить основной класс sbootproject.SBootJpaProject1Application. Вызвано: java.lang.ClassNotFoundException: sbootproject.SBootJpaProject1Application»
ты знаешь, почему он так сказал?
да. это не имеет смысла, потому что классы расположены так же, как и раньше.
ваш проект github имеет ошибку компиляции, userDetail должен удалить выбранное исключение. также, что вы сделали, чтобы получить указанную выше ошибку?
Позвольте нам продолжить обсуждение в чате.
Следующие ошибки, которые я наблюдал в вашем репозитории проекта github:
1. нужно добавить import io.jsonwebtoken.SignatureAlgorithm; в AuthenticationFilter.java
2. UserService.java имеет метод UserDetails loadUserByUsername(String email) throws Exception;, который похож на UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; в интерфейсе UserDetailsService, я удалил его, поскольку оба служат одной цели.
3. Обновлен метод loadUserByUsername в UserServiceImpl.java и выдает исключение UsernameNotFoundException вместо Exception (поскольку метод является производным от интерфейса UserDetailsService).
Я отправил запрос на слияние к вашему репо, и изменения следующие: https://github.com/jwolfe890/SpringBootProject1/pull/1/files
Дайте мне знать, если вы этого не ожидали.
по какой-то причине эта проблема была уникальной для Spring Tool Suite. После объединения ваших изменений и перехода на Intellij это сработало.
Он должен работать после слияния моих изменений (упомянутых выше).
Для других, ищущих ответа, когда зависимость токена JWT не импортируется: это похоже на ошибку в IntelliJ.
Добавьте зависимость в другой проект и попробуйте еще раз.
Я могу успешно добавить эти зависимости в проект maven в IntelliJ IDE.
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
у меня не получилось, к сожалению = (
Я выполнил команду ниже внутри папки проекта
gradlew clean build --refresh-dependencies
и добавил строку ниже в файл Gradle
compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
и это сработало для меня. благодаря.
Здесь сработало - Ссылка - https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt/0.2
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.2</version>
</dependency>
Если ваше приложение на maven, то вставьте в файл pom.xml
у тебя есть проект на гитхабе?