Сложность импорта JWT (JSON Web Token) в проекте Spring Boot Gradle

У меня есть проект 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, а упомянутый выше класс находится по адресу:

https://github.com/jwolfe890/SpringBootProject1/blob/master/src/main/java/sbootproject/security/AuthenticationFilter.java

у тебя есть проект на гитхабе?

Chi Dov 17.12.2018 06:50

да, это тот класс, о котором я говорю github.com/jwolfe890/SpringBootProject1/blob/master/src/main‌ /…

Dog 17.12.2018 06:52

@Dog, пожалуйста, проверьте и объедините, я внес необходимые изменения в ваш проект: github.com/jwolfe890/SpringBootProject1/pull/1

dkb 17.12.2018 07:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
3
17 246
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Итак, у меня возникла проблема, вы должны использовать 0,2 вместо 0,2.0

Для gradle 4.10 было бы хорошо использовать реализацию вместо компиляции.

implementation('io.jsonwebtoken:jjwt:0.2')

Это тоже не сработало. Изначально у меня он был как .2, но изменил его, когда пробовал разные версии. Я думаю, что это может иметь какое-то отношение к пути сборки, но его очистка и повторный запуск Spring Tool Suite не помогли.

Dog 17.12.2018 07:04

у меня работает с compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.2' или implementation('io.jsonwebtoken:jjwt:0.2'). попробуй сделать ./gradlew clean build --refresh-dependencies

Chi Dov 17.12.2018 07:05

теперь он сообщает мне: «Ошибка: не удалось найти или загрузить основной класс sbootproject.SBootJpaProject1Application. Вызвано: java.lang.ClassNotFoundException: sbootproject.SBootJpaProject1Application»

Dog 17.12.2018 07:17

ты знаешь, почему он так сказал?

Dog 17.12.2018 07:17

да. это не имеет смысла, потому что классы расположены так же, как и раньше.

Dog 17.12.2018 07:19

ваш проект github имеет ошибку компиляции, userDetail должен удалить выбранное исключение. также, что вы сделали, чтобы получить указанную выше ошибку?

Chi Dov 17.12.2018 07:30

Позвольте нам продолжить обсуждение в чате.

Dog 17.12.2018 07:44

Следующие ошибки, которые я наблюдал в вашем репозитории проекта 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 это сработало.

Dog 17.12.2018 08:30

Он должен работать после слияния моих изменений (упомянутых выше).

dkb 17.12.2018 09:45

Для других, ищущих ответа, когда зависимость токена JWT не импортируется: это похоже на ошибку в IntelliJ.
Добавьте зависимость в другой проект и попробуйте еще раз.

Я могу успешно добавить эти зависимости в проект maven в IntelliJ IDE.

    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>

у меня не получилось, к сожалению = (

jonathasborges1 09.11.2021 06:21

Я выполнил команду ниже внутри папки проекта

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

Другие вопросы по теме