Spring boot Security Desativar segurança

93

Quando eu uso security.basic.enabled = false para desativar a segurança em um projeto Spring Boot que tem as seguintes dependências:

    <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>

Vejo a seguinte exceção:

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 corrigir essa exceção, tive que adicionar a propriedade - management.security.enabled = false . Meu entendimento é que quando o atuador está no caminho de classe, security.basic.enabled = false e management.security.enabled = false devem ser definidos para desabilitar a segurança.

Alguém poderia me informar se meu entendimento estiver errado?

usuário 3600073
fonte
1
Por que você precisa de segurança em seu classpath se deseja apenas desabilitar tudo? De qualquer forma, seu rastreamento de pilha está incompleto, então não há como saber o que estava impedindo o aplicativo de iniciar. Eu esperaria que ele fosse iniciado, mas os terminais do atuador devem permanecer seguros até que você os abra explicitamente.
Dave Syer
@DaveSyer Eu gostaria de desativar a segurança temporariamente e também o código do meu aplicativo faz com que os jars de segurança funcionem.
Stackee007
Você ainda não postou informações suficientes para ver por que o aplicativo não está iniciando. Um rastreamento de pilha completo seria um começo.
Dave Syer de
2
@DaveSyer Uma razão seria um microsserviço gerenciando spring-sec-oauth2 ClientDetails. Você terá uma importação transitiva de spring-security, mas talvez não queira autenticação básica em seu serviço.
Dirk Lachowski

Respostas:

79

O que também parece funcionar bem é a criação de um arquivo application-dev.propertiesque contém:

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

Se você iniciar o aplicativo Spring Boot com o devperfil, não será necessário fazer logon.

Wim Deblauwe
fonte
1
security.basic.enabled = false não é necessário se você desabilitar a segurança com management.security.enabled = false
hennr
Eu também adicionei security.ignored=/**então funcionou. stackoverflow.com/a/36280413/3291867
mojtab23
11
Agora está obsoleto!
Eagle_Eye
6
De fato. Veja spring.io/blog/2017/09/15/… para mais informações sobre a suspensão de uso que ocorreu no Spring Boot 2
Wim Deblauwe
73

No caso de você ter atuador de inicialização de mola em seu pacote, você deve adicionar o seguinte

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

Com o Spring-boot mais antigo, a classe foi chamada ManagementSecurityAutoConfiguration.

Nas versões mais recentes, mudou para

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

Se você precisa de segurança como uma dependência, mas não quer que o Spring Boot a configure para você, você pode usar esta exclusão:

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

Para Spring Boot 2, as seguintes propriedades estão obsoletas na configuração application.yml

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

Para desativar a segurança para Sprint Boot 2 Basic + Actuator Security, as seguintes propriedades podem ser usadas no arquivo application.yml em vez de exclusão baseada em anotação (@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 application.properties, a sintaxe seria como

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
karans123
fonte
21

Para usuários da bota de mola 2, deve

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
gkatzioura
fonte
1
O que aconteceu com ManagementWebSecurityAutoConfiguration no Spring Boot 2.0
Viyaan Jhiingade
Talvez você ainda precise comentar sua @EnableWebSecurityanotação
Victor Petit
11

Etapa 1: anotação de comentário @EnableWebSecurity em sua configuração de segurança

//@EnableWebSecurity

Etapa 2: adicione isso ao seu arquivo application.properties .

security.ignored=/**
spring.security.enabled=false
management.security.enabled=false
security.basic.enabled=false

Para obter mais detalhes, clique aqui: http://codelocation.com/how-to-turn-on-and-off-spring-security-in-spring-boot-application/

VK321
fonte
Infelizmente, isso não funciona. Assim que eu iniciar o spring-boot, ele criará a cadeia de filtro de segurança padrão: 2020-11-29 18: 48: 58.095 INFO 30744 --- [restartedMain] ossweb.DefaultSecurityFilterChain: Criando cadeia de filtro: qualquer solicitação, [org.springframework. security.web.context.request.async.WebAsyncManagerIntegrationFilter@7c9e4dd, org.springframework.security.web.context.SecurityContextPersistenceFilter@1d14d528, org.springframework.security.web.headfurity3HeaderWritercurity.web.headfurity3 csrf.CsrfFilter@71b72226, org.springframework.security ....
Ville Miekk-oja
6

Se você estiver usando @WebMvcTestanotações em sua classe de teste

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

não te ajuda.

Você pode desativar a segurança aqui

@WebMvcTest(secure = false)
Mykola Shorobura
fonte
5

Adicione a seguinte classe em seu 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();
    }

}

E dentro de application.properties add

security.ignored=/**
security.basic.enabled=false
management.security.enabled=false
vaquar khan
fonte
4

A resposta é permitir todas as solicitações em WebSecurityConfigurerAdapter conforme abaixo.

você pode fazer isso em uma classe existente ou em uma nova classe.

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

Observação: se houver uma classe GlobalMethodSecurityConfiguration existente, você deve desativá-la.

U_R_Naveen UR_Naveen
fonte
Não funcionou. Mas este funcionou para mim stackoverflow.com/questions/23894010/…
Ravi MCA
Olá ravi, de acordo com sua solução, não é recomendado desativar o csrf em produção como "http.csrf.disable ()". você obteve um problema de CSRF para chamadas POST, etc.?
U_R_Naveen UR_Naveen
3

Permitir acesso a tudo usando antMatchers ("/")

     protected void configure(HttpSecurity http) throws Exception {
            System.out.println("configure");
                    http.csrf().disable();
                    http.authorizeRequests().antMatchers("/").permitAll();
        }
Sarat Chandra
fonte
O problema com isso é que acesso e segurança não são a mesma coisa. Você pode permitir o acesso a tudo, mas isso não desativa a segurança. Por exemplo, strings de aparência maliciosa ainda são detectadas.
Ville Miekk-oja
3

Eu simplesmente adicionei security.ignored=/**o application.properties, e isso fez o encanto.

codereal
fonte
então isso significa que o mecanismo de segurança automática ainda está em vigor, mas apenas ignorando todos os caminhos. Eu não ficaria confortável em guardar as coisas que não são necessárias
Paramvir Singh Karwal
2

Para evitar segurança, você pode usar anotações. Use esta anotação na parte superior da classe de configuração:

@EnableWebSecurity

Por exemplo:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}
Ramesh Babu
fonte
17
Por que @EnableWebSecuritydesabilitar o Web Security?
lilalinux
Pelo menos, ele desativa a configuração de segurança padrão no Spring Boot
amseager
2

Você precisa adicionar esta entrada a application.properties para ignorar Springboot Default Security

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

Então não haverá nenhuma caixa de autenticação. otrws, as credenciais são: - user e 99b962fa-1848-4201-ae67-580bdeae87e9 (senha gerada aleatoriamente)

Note: my springBootVersion = '1.5.14.RELEASE'

Titus
fonte
sem isso, security.basic.enabled = false management.security.enabled = false security.ignored = / ** não é suficiente, é normal?
Bilgehan
2

Você pode configurar para alternar a segurança da mola em seu projeto seguindo 2 etapas abaixo:

PASSO 1: adicione um@ConditionalOnProperty anotação no topo de sua classe SecurityConfig. Consulte abaixo:

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

PASSO 2: Adicione a seguinte configuração ao seu arquivo application.propertiesou application.yml.

application.properties

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

OU

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false
Sahil Chhabra
fonte
É possível usar apenas uma propriedade?
wakedeer
@wakedeer, seu comentário parece enigmático, poderia explicar melhor?
Sahil Chhabra
Quero dizer que security.ignored = / ** não é necessário
wakedeer
2

A única coisa que funcionou para mim:

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

e

security.ignored=/**

Pode ser que a parte das propriedades seja redundante ou possa ser feita em código, mas não teve tempo de experimentar. Enfim, é temporário.

alexcorghencea
fonte
1

A maneira mais fácil de Spring Boot 2 sem dependências ou alterações de código é apenas:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
Przemek Nowak
fonte
2
Isso não está funcionando com Spring Boot v2.2.2.RELEASE
Pra_A
0

Adicione as linhas abaixo ao seu aplicativo principal.

Remova org.activiti.spring.boot.SecurityAutoConfiguration.class se você não estiver usando o activiti.

Da mesma forma, remova o do atuador se não estiver usando o atuador de mola.

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

Como anteriormente, várias soluções mencionadas para desativar a segurança por meio de comentários de

@EnableWebSecurity

anotação e outros é por meio de propriedades em application.properties ou yml. Mas essas propriedades estão se mostrando obsoletas na última versão do Spring Boot.

Portanto, gostaria de compartilhar outra abordagem para configurar o nome de usuário e a senha padrão em seu application-dev.properties ou application-dev.yml e usá-los para fazer o login no swagger e etc. no ambiente de desenvolvimento.

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

Portanto, essa abordagem também fornecerá algum tipo de segurança e você poderá compartilhar essas informações com sua equipe de desenvolvimento. Você também pode configurar funções de usuário, mas não é necessário no nível de desenvolvimento.

Nallamachu
fonte
-3

Eu adicionei as configurações abaixo em application.yml e funcionou bem.

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

isso pode ser convertido security.route-paterns-to-be-skipped=/**/*para application.properties

Prasath Rajan
fonte
1
Esta propriedade não existe.
Drakes de