Не удается найти SecurityMockMvcConfigurers

Я пытаюсь написать тест безопасности весны, как описано здесь http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#test-mockmvc-setup. Мне нужно импортировать SecurityMockMvcConfigurers как статический импорт, но моя среда IDE не находит класс.

Мой pom.xml выглядит следующим образом:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.M2</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Spring Boot 1.4.0.M2 импортирует Spring Security 4.0.4.RELEASE. Я не могу найти класс в этой версии. Какая дополнительная зависимость мне нужна? Или что еще я не рассматривал?

Ответы

Ответ 1

Недопустимая зависимость:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <version>4.0.4.RELEASE</version>
</dependency>

Ответ 2

Необходимая зависимость для класса org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers - это зависимость org.springframework.security:spring-security-test.

Вопрос связан с тегом Spring Boot и Spring Boot, который обеспечивает зависимость в качестве управляемой зависимости в spring-boot-starter-parent помпе spring-boot-starter-parent.
Ваш pom наследует очень вероятно от spring-boot-starter-parent.
Поэтому прежде всего не указывайте версию без уважительной причины и просто используйте версию, унаследованную от родителя.
Этого достаточно:

<dependencies> 
     ...
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>         
    </dependency>
     ...
<dependencies> 

Например, с Spring Boot 2.0.0.M5, управляемая версия

  <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <version>5.0.0.M5</version>
  </dependency>

M5 - это не просто случайность.
Они предназначены для совместной работы.

Обратите внимание, что org.springframework.boot:spring-boot-starter-test не вытягивает зависимость от org.springframework.boot:spring-boot-starter-test spring-security-test.

В случае, если вы не используете Spring Boot, вам следует попытаться указать версию spring-security-test соответствии с версией Core Spring, используемой приложением.

Ответ 3

Класс SecurityMockMvcConfigurers включен в

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>

В других версиях SecurityMockMvcConfigurers может не существовать.

Однако есть класс MockMvcConfigurer, может быть, вы можете работать с этим вместо этого?

относительно: но эта зависимость не содержит соответствующий класс.

Да, вы правы, что класс не включен в банку. Поэтому я думаю, вы должны использовать то, что есть. Во всяком случае, класс довольно прост, и исходный код здесь: SecurityMockMvcConfigurers

Просто скопируйте код в своем классе, и все готово.