为什么需要显式导入 spring-security-web 依赖项?

在具有以下安全配置的示例 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


largeQ
浏览 252回答 2
2回答

胡说叔叔

Spring Security是Spring的一个不同模块。在我们使用Spring Core或Spring Web&nbsp;/&nbsp;Spring MVC或任何其他模块的地方,并不总是使用这个模块。这是一个独立的模块,我们可以随时添加和使用。这就是 Spring 开发人员使Spring Security 模块独立的原因。我们不应该用未使用的东西使我们的应用程序繁重。我们应该在应用程序需要时使用它。

慕容708150

该框架本身就很大,它甚至有自己的框架,称为Spring-Boot。将功能部分分成称为Spring Projects 的东西是非常有意义的。和社区项目一样的官方有很多: 几个例子:春季数据春季安全春批请注意 Spring 网页注释:Spring 是模块化的设计学习所有 Spring 项目可能会变得繁琐和不堪重负。与您将应用程序划分为包、项目相同 - 相同的方法使用 Spring 独立于其他部分控制其所有部分。一些 Spring 项目仍然太大而无法划分为子项目 - Spring Security 就是一个很好的例子。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java