Spring boot Security Desactivar la seguridad

92

Cuando uso security.basic.enabled = false para deshabilitar la seguridad en un proyecto Spring Boot que tiene las siguientes dependencias:

    <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-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

Veo la siguiente excepción:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.setObjectPostProcessor(org.springframework.security.config.annotation.ObjectPostProcessor); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.config.annotation.ObjectPostProcessor] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

Para solucionar esta excepción, tuve que agregar la propiedad - management.security.enabled = false . Tengo entendido que cuando el actuador está en la ruta de clase, tanto security.basic.enabled = false como management.security.enabled = false deben configurarse para deshabilitar la seguridad.

¿Podría alguien avisarme si mi comprensión es incorrecta?

usuario3600073
fuente
1
¿Por qué necesita seguridad en su classpath si solo desea deshabilitar todo? De todos modos, el seguimiento de la pila está incompleto, por lo que no hay forma de saber qué impedía que se iniciara la aplicación. Esperaría que comenzara, pero los puntos finales del actuador deben permanecer seguros hasta que los abra explícitamente.
Dave Syer
@DaveSyer Me gustaría deshabilitar la seguridad temporalmente y también mi código de aplicación hace que funcionen los frascos de seguridad.
Stackee007
Aún no ha publicado suficiente información para ver por qué no se inicia la aplicación. Un seguimiento de pila completo sería un comienzo.
Dave Syer
2
@DaveSyer Una razón sería un microservicio que administre spring-sec-oauth2 ClientDetails. Tendrá una importación transitiva de spring-security, pero tal vez no desee la autenticación básica en su servicio.
Dirk Lachowski

Respuestas:

79

Lo que también parece funcionar bien es crear un archivo application-dev.propertiesque contenga:

security.basic.enabled=false
management.security.enabled=false

Si luego inicia su aplicación Spring Boot con el devperfil, no necesita iniciar sesión.

Wim Deblauwe
fuente
1
security.basic.enabled = false no es necesario si deshabilita la seguridad con management.security.enabled = false
hennr
También agregué y security.ignored=/**luego trabajé. stackoverflow.com/a/36280413/3291867
mojtab23
10
¡Esto ahora está desaprobado!
Eagle_Eye
6
En efecto. Consulte spring.io/blog/2017/09/15/… para obtener más información sobre la desaprobación que ocurrió en Spring Boot 2
Wim Deblauwe
72

En caso de que tenga spring-boot-actuator en su paquete, debe agregar lo siguiente

@EnableAutoConfiguration(exclude = {
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class})

Con Spring-boot más antiguo, se llamó a la clase ManagementSecurityAutoConfiguration.

En versiones más recientes esto ha cambiado a

@SpringBootApplication(exclude = {
        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class}
        )
Varesh
fuente
39

Si necesita seguridad como dependencia pero no desea que Spring Boot la configure por usted, puede usar esta exclusión:

    @EnableAutoConfiguration(exclude = { 
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class 
    })
gyoder
fuente
21

Para los usuarios de Spring Boot 2 tiene que ser

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
gkatzioura
fuente
1
Qué sucedió con ManagementWebSecurityAutoConfiguration en Spring Boot 2.0
Viyaan Jhiingade
Es posible que aún tenga que comentar su @EnableWebSecurityanotación
Victor Petit
21

Para Spring Boot 2, las siguientes propiedades están obsoletas en la configuración de application.yml

  security.basic.enabled: false
  management.security.enabled: false

Para deshabilitar la seguridad para Sprint Boot 2 Basic + Actuator Security se pueden usar las siguientes propiedades en el archivo application.yml en lugar de la exclusión basada en anotaciones (@EnableAutoConfiguration (exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class}))

  spring:
    autoconfigure:
      exclude[0]: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
      exclude[1]: org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration

Para la sintaxis de application.properties sería como

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
karans123
fuente
5

Agregue la siguiente clase en su código

import org.springframework.context.annotation.Configuration;
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;

/**
 * @author vaquar khan
 */
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/**").permitAll().anyRequest().authenticated().and().csrf().disable();
    }

}

Y en el interior de application.properties agregue

security.ignored=/**
security.basic.enabled=false
management.security.enabled=false
vaquar khan
fuente
5

Si está utilizando @WebMvcTestanotaciones en su clase de prueba

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
@TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})

no te ayuda.

Puede deshabilitar la seguridad aquí

@WebMvcTest(secure = false)
Mykola Shorobura
fuente
4

La respuesta es permitir todas las solicitudes en WebSecurityConfigurerAdapter como se muestra a continuación.

puede hacer esto en una clase existente o en una nueva clase.

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }

Tenga en cuenta: si hay una clase GlobalMethodSecurityConfiguration existente, debe deshabilitarla.

U_R_Naveen UR_Naveen
fuente
No funcionó. Pero este funcionó para mí stackoverflow.com/questions/23894010/…
Ravi MCA
Hola ravi, según tu solución, no se recomienda deshabilitar csrf en producción como "http.csrf.disable ()". ¿Recibiste un problema CSRF para llamadas POST, etc.?
U_R_Naveen UR_Naveen
3

Permitir el acceso a todo con antMatchers ("/")

     protected void configure(HttpSecurity http) throws Exception {
            System.out.println("configure");
                    http.csrf().disable();
                    http.authorizeRequests().antMatchers("/").permitAll();
        }
Sarat Chandra
fuente
3

Simplemente agregué security.ignored=/**el application.properties, y eso hizo el encanto.

codereal
fuente
lo que significa que el mecanismo de seguridad automático todavía está en su lugar, pero simplemente ignora todos los caminos. No me sentiría cómodo manteniendo las cosas que no son necesarias
Paramvir Singh Karwal
2

Para evitar la seguridad, puede utilizar anotaciones. Utilice esta anotación en la parte superior de la clase de configuración:

@EnableWebSecurity

Por ejemplo:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}
Ramesh Babu
fuente
15
¿Por qué debería @EnableWebSecuritydeshabilitar la seguridad web?
lilalinux
2

Debe agregar esta entrada a application.properties para omitir Springboot Default Security

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

Entonces no habrá ningún cuadro de autenticación. otrws, las credenciales son: - usery 99b962fa-1848-4201-ae67-580bdeae87e9 (contraseña generada aleatoriamente)

Note: my springBootVersion = '1.5.14.RELEASE'

Titus
fuente
sin esto, security.basic.enabled = false management.security.enabled = false security.ignored = / ** no es suficiente, ¿es normal?
Bilgehan
2

Puede configurar para alternar la seguridad de primavera en su proyecto siguiendo los siguientes 2 pasos:

PASO 1: agregue una @ConditionalOnPropertyanotación en la parte superior de su clase SecurityConfig. Consulte a continuación:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity (prePostEnabled = true)
@ConditionalOnProperty (name = "myproject.security.enabled", havingValue = "true", matchIfMissing = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   // your security config
}

PASO 2: Agregue la siguiente configuración a su archivo application.propertieso application.yml.

application.properties

security.ignored=/**
myproject.security.enabled=false

O

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false
Sahil Chhabra
fuente
1

Lo único que funcionó para mí:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests().anyRequest().permitAll();
    }

y

security.ignored=/**

Podría ser que la parte de propiedades sea redundante o se pueda hacer en código, pero no hubo tiempo para experimentar. De todos modos es temporal.

alexcorghencea
fuente
1

La forma más fácil de Spring Boot 2 sin dependencias o cambios de código es simplemente:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
Przemek Nowak
fuente
1
Esto no funciona con Spring Boot v2.2.2.RELEASE
Pra_A
0

Agregue las siguientes líneas a su aplicación principal.

Elimine org.activiti.spring.boot.SecurityAutoConfiguration.class si no está usando activiti.

Del mismo modo, retire el del actuador si no está utilizando spring-boot-actuator.

@EnableAutoConfiguration(exclude = {
org.activiti.spring.boot.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class,
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class })
CodeShadow
fuente
0

Como se mencionó anteriormente, varias soluciones para deshabilitar la seguridad mediante comentarios de

@EnableWebSecurity

la anotación y otras son a través de propiedades en application.properties o yml. Pero esas propiedades se muestran como obsoletas en la última versión de Spring Boot.

Por lo tanto, me gustaría compartir otro enfoque para configurar el nombre de usuario y la contraseña predeterminados en su application-dev.properties o application-dev.yml y usarlos para iniciar sesión en swagger, etc.en el entorno de desarrollo.

spring.security.user.name=admin
spring.security.user.password=admin

Por lo tanto, este enfoque también le proporcionará algún tipo de seguridad y puede compartir esta información con su equipo de desarrollo. También puede configurar roles de usuario, pero no es necesario en el nivel de desarrollo.

Nallamachu
fuente
-3

Agregué la siguiente configuración en application.yml y funcionó bien.

security:
    route-patterns-to-be-skipped:
      - /**/*

esto se puede convertir como security.route-paterns-to-be-skipped=/**/*para application.properties

Prasath Rajan
fuente
1
Esta propiedad no existe en absoluto.
Drakes