在spring boot app中禁用spring security

jay*_*g22 43 java spring spring-security spring-boot spring-java-config

我有一个Spring Boot web应用程序,配置了spring security.我想暂时禁用身份验证(直到需要).

我把它添加到application.properties:

security.basic.enable: false   
management.security.enabled: false  
Run Code Online (Sandbox Code Playgroud)

这是我的一部分

但我仍然有一个基本的安全性:启动时生成一个默认的安全密码,我仍然收到HTTP身份验证提示框.

我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>fr.test.sample</groupId>
    <artifactId>navigo</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.1.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.7</java.version>
        <jsoup.version>1.8.3</jsoup.version>
        <guava.version>18.0</guava.version>
        <postgresql.version>9.3-1103-jdbc41</postgresql.version>
    </properties>

    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>${jsoup.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            </dependency>
    </dependencies>

    <!-- Package as an executable jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

</project>
Run Code Online (Sandbox Code Playgroud)

安全性在WebSecurityConfig.java中配置(我已注释注释以禁用它):

//@Configuration
//@EnableWebSecurity
//@EnableGlobalMethodSecurity(prePostEnabled = true)
//@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    UserDetailsService userDetailsService;

    @Autowired
    UserService userService;

    @Autowired
    private DataSource datasource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // http.authorizeRequests().antMatchers("/bus/topologie", "/home")
        // http.authorizeRequests().anyRequest().authenticated()
        // .antMatchers("/admin/**").access("hasRole('ADMIN')").and()
        // .formLogin().failureUrl("/login?error")
        // .defaultSuccessUrl("/bus/topologie").loginPage("/login")
        // .permitAll().and().logout()
        // .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
        // .logoutSuccessUrl("/login").permitAll().and().rememberMe()
        // .rememberMeParameter("remember-me")
        // .tokenRepository(persistentTokenRepository())
        // .tokenValiditySeconds(86400).and().csrf();
    }

    @Bean
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl tokenRepositoryImpl = new JdbcTokenRepositoryImpl();
        tokenRepositoryImpl.setDataSource(datasource);
        return tokenRepositoryImpl;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {

        PasswordEncoder encoder = new BCryptPasswordEncoder();

        auth.userDetailsService(userDetailsService).passwordEncoder(encoder);
        auth.jdbcAuthentication().dataSource(datasource);

        if (!userService.userExists("user")) {
            User userAdmin = new User("user", encoder.encode("password"), true);
            Set<Authorities> authorities = new HashSet<Authorities>();
            authorities.add(new Authorities(userAdmin,"ADMIN"));
            authorities.add(new Authorities(userAdmin,"CRIP"));
            authorities.add(new Authorities(userAdmin,"USER"));
            userAdmin.setAuthorities(authorities);

            userService.createUser(userAdmin);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Ali*_*ani 62

使用security.ignored属性:

security.ignored=/**
Run Code Online (Sandbox Code Playgroud)

security.basic.enable: false将仅禁用安全自动配置的某些部分,但WebSecurityConfig仍会注册您的静态配置.

启动时会生成默认安全密码

尝试AutowiredAuthenticationManagerBuilder:

@Override
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception { ... }
Run Code Online (Sandbox Code Playgroud)

  • 它不适用于Spring Boot 2,因为不推荐从`application.properties`禁用.试试/sf/answers/3310449411/ (8认同)
  • security.ignored=/** 是进入 securityconfig 类还是 application.properties ? (2认同)
  • @Ali Dehghani有什么想法如何在spring boot 2.0中实现同样的目标? (2认同)

bma*_*ham 22

试试这个.上一堂课

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.authorizeRequests().antMatchers("/").permitAll();
}

}
Run Code Online (Sandbox Code Playgroud)

基本上这告诉Spring允许访问每个URL.@Configuration告诉spring它是一个配置类

  • ```WebSecurityConfigurerAdapter``` - 已弃用。 (2认同)

nuk*_*kie 12

我认为您还必须从带@SpringBootApplication注释的类中删除安全性自动配置:

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
    org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration.class})
Run Code Online (Sandbox Code Playgroud)


Jok*_*ker 7

从Spring Boot 2开始不推荐使用 security.ignored 。

对我来说,简单地扩展您的Application类的Annotation就可以了

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
Run Code Online (Sandbox Code Playgroud)


Cmy*_*ker 6

由于禁止使用 security.disable 选项,因此仍然有一种方法可以从纯配置中实现它,而无需触及任何类苍蝇(对我来说,它为环境操作创造了便利,并且可以使用 ENV 变量激活它),如果您使用 Boot

spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
Run Code Online (Sandbox Code Playgroud)


Enr*_*rin 5

使用此解决方案,您可以通过命令行激活特定的配置文件来完全启用/禁用安全性。我在文件中定义了配置文件application-nosecurity.yaml

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
Run Code Online (Sandbox Code Playgroud)

然后,WebSecurityConfigurerAdapter通过添加@Profile("!nosecurity")以下内容来修改我的自定义:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Profile("!nosecurity")
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {...}
Run Code Online (Sandbox Code Playgroud)

要完全禁用安全性,只需指定nosecurity配置文件即可启动应用程序,即:

java -jar  target/myApp.jar --spring.profiles.active=nosecurity
Run Code Online (Sandbox Code Playgroud)


Ani*_*AOU 5

只需添加

@SpringBootApplication(排除= SecurityAutoConfiguration.class)


Sai*_*pta 5

对我来说,仅排除以下课程有效:

import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class}) {
  // ... 
}
Run Code Online (Sandbox Code Playgroud)


小智 5

更改WebSecurityConfig.java:注释掉configure方法中的所有内容并添加

http.authorizeRequests().antMatchers("/**").permitAll();
Run Code Online (Sandbox Code Playgroud)

这将允许任何请求访问每个 URL,而无需进行任何身份验证。


归档时间:

查看次数:

93087 次

最近记录:

6 年,6 月 前