почему вам нужно явно импортировать Spring-Security-Web-зависимость? - PullRequest
0 голосов
/ 11 сентября 2018

В примере проекта Spring со следующей конфигурацией безопасности:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    MySimpleEncoder passwordEncoder;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .passwordEncoder(passwordEncoder)
                .withUser("admin").password(passwordEncoder.encode("admino")).roles("USER","ADMIN")
                .and()
                .withUser("user").password(passwordEncoder.encode("123456")).roles("USER");
    }

    @Bean
    public MySimpleEncoder passwordEncoder() {
        return new MySimpleEncoder();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/**").hasAnyRole("ADMIN", "USER")
                .and().httpBasic()
                .and().csrf().disable();
    }
}

Я заметил, что вам нужны эти две зависимости:

 <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
    </dependency>

но также это, которое необходимо во время выполнения:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <scope>runtime</scope>
</dependency>

Почему последняя зависимость не извлекается автоматически с областью выполнения одной из двух других зависимостей?

Почему мы должны явно объявить это?

Я использую Spring 5

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Фреймворк сам по себе настолько огромен, что у него есть даже собственный фреймворк, называемый Spring-Boot . Имеет смысл разделить функциональные части на нечто, называемое Spring Projects . Есть много официальных, таких же, как проекты сообщества: Несколько примеров:

  • Spring Data
  • Spring Security
  • Весенняя партия

Обратите внимание на примечания к веб-странице Spring:

Пружина имеет модульную конструкцию

Изучение всех весенних проектов может стать громоздким и ошеломляющим. То же самое вы делите свое приложение на пакеты, проекты - тот же подход использует Spring для управления всеми его частями независимо от других. Некоторые проекты Spring по-прежнему слишком велики, чтобы их можно было разделить на подпроекты - хороший пример тому - Spring Security.

0 голосов
/ 11 сентября 2018

Spring Security - это другой модуль Spring. Этот модуль используется не всегда там, где мы используем Spring Core или Spring Web / Spring MVC или любой другой модуль. Это независимый модуль, при необходимости мы можем добавлять и использовать.

Именно по этой причине разработчики Spring сделали независимым от модуля Spring Security .

Мы не должны перегружать наше приложение неиспользуемым материалом. Мы должны использовать это, когда приложение требует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...