source

스프링 보안 로그인 화면을 비활성화하려면 어떻게 해야 합니까?

manysource 2023. 2. 12. 18:09

스프링 보안 로그인 화면을 비활성화하려면 어떻게 해야 합니까?

사용하고 있다spring-boot-starter-security종속성, 함께 제공되는 여러 클래스를 활용하기 위해spring-security하지만 기존 시스템에 통합하고 싶기 때문에vaadin어플리케이션, spring 기본 로그인/auth 화면이 아닌 클래스만 사용하고 싶습니다.

이 화면을 비활성화하려면 어떻게 해야 하나요?

확장 기능을 사용하여 구성할 수 없습니다.WebSecurityConfigurerAdapter이미 메인 엔트리 클래스로서extends SpringBootServletInitializer또한 Vaadin 애플리케이션은 기본적으로 항상 동일한 URL 경로에서 실행되며 내부 탐색을 사용합니다.

@EnableAutoConfiguration
public class MyApp extends SpringBootServletInitializer { 

        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(MyApp.class);
        }

        public static void main(String[] args) {
            SpringApplication.run(MyApp.class, args);
        }
}

그러면 로그인 화면을 비활성화하려면 어떻게 해야 합니까?스프링 보안 기능을 활용합니다.

다음과 같이 Java 기반 설정을 사용할 수 있습니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity security) throws Exception
    {
     security.httpBasic().disable();
    }
}

응용 프로그램이 자동으로 새로 고쳐지면 다시 시작합니다.

Spring Boot의 기본 보안은 Basic입니다.를 설정하면, 무효로 할 수 있습니다.security.basic.enabled=false여기여기랑 여기랑 더 자세히.

기본 스프링보안을 자동설정에서 제외하여 비활성화합니다.더하다SecurityAutoConfiguration.class에게exclude의 특성@SpringBootApplication주석에 주석을 붙입니다.다음과 같습니다.

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

메인 스프링 부트응용 프로그램클래스(@SpringBootApplication 주석이 있는 클래스)

@SpringBootApplication(exclude={SecurityAutoConfiguration.class})

더 간단한 해결책이 있는 것 같다.

이 주석을 메인 클래스 위 또는 같은 위치에 놓기만 하면 됩니다.SpingBootApplication주석

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

로그인 루트를 완전히 디세블로 만들려면 Spring Security 설정 개체를 사용합니다.

다음 스니펫에서는org.springframework.boot:2.1.6.RELEASE

@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter() {
  override fun configure(security: HttpSecurity) {
    super.configure(security)

    security.httpBasic().disable()

    security.cors().and().csrf().disable().authorizeRequests()
      .anyRequest().authenticated()
      .and().formLogin().disable() // <-- this will disable the login route
      .addFilter(JWTAuthorizationFilter(authenticationManager()))
      .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  }

  @Bean
  fun corsConfigurationSource(): CorsConfigurationSource {
    val source = UrlBasedCorsConfigurationSource()
    val config = CorsConfiguration().applyPermitDefaultValues()
    config.addExposedHeader("Authorization")
    source.registerCorsConfiguration("/**", config)
    return source
  }
}

이건 내게 효과가 있었다.

            @Configuration
            @EnableWebSecurity
            public class SecurityConfig extends WebSecurityConfigurerAdapter {
                @Override
                protected void configure(HttpSecurity security) throws Exception
                {
                 //security.httpBasic().disable(); // Did work only for GET     
                 security.csrf().disable().authorizeRequests().anyRequest().permitAll(); // Works for GET, POST, PUT, DELETE
                }
            }          

이 코드는 새로운 버전의 스프링부트(3.0.0-m4) 및 리액티브모델(webflux)에서 사용할 수 있습니다.

@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
   @Bean
    public SecurityWebFilterChain filterChain(ServerHttpSecurity http) {
    return http
            .httpBasic().disable()
            .build();
}
}

이는 기본 Spring Boot 로그인 화면을 삭제하고 안전한 경로를 확보하는데 어려움을 겪고 있는 다른 사용자를 지원하기 위한 것입니다.이것은 Spring Boot 2.3.4와 Spring-boot-security starter를 사용하는 경우 도움이 되었습니다.https://www.toptal.com/spring/spring-security-tutorial 에서는 도움이 되었습니다.이 구성에서는 GET에서 /api/config-props 및 /actuator/health를 사용할 수 있지만 다른 액추에이터 경로 또는 다른 API 경로에 대한 인증이 필요합니다.마지막으로 /resources 또는 /public 등에서 정적 콘텐츠를 제공할 수 있는 기타 비트에 대해 GET을 허용합니다.

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity security) throws Exception {
    // Enable CORS and disable CSRF
    security = security.cors().and().csrf().disable();

    // Set session management to stateless
    security = security
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and();

    // Set permissions on endpoints
    security.authorizeRequests()
            // Our public endpoints, secured endpoints and then open everything else that is static resource stuff
            .antMatchers(HttpMethod.GET, "/api/config-props").permitAll()
            .antMatchers(HttpMethod.GET, "/actuator/health").permitAll()
            .antMatchers("/actuator**").authenticated()
            .antMatchers("/api/**").authenticated()
            .antMatchers(HttpMethod.GET, "/**").permitAll();
  }
}

Web Security Configurer Adapter의 사용은 최근 Spring 버전에서는 권장되지 않습니다.대신 Spring Documentation https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter에 따라 Security Filter Chain을 사용해야 합니다.

동일한 코드에 대해 아래 코드를 공유합니다.

    @Configuration
    public class SecurityConfiguration {
        @Bean
        public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            http
                .authorizeHttpRequests((authz) -> authz
                    .anyRequest().authenticated()
                )
                .httpBasic(withDefaults());
            return http.build();
        }
    
        @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring().requestMatchers("/*");
    }
    }

RequestMatchers에서는 Spring Security를 사용하지 않고 모든 엔드포인트를 허용하고 있지만 Spring Security를 사용하지 않고 노출해야 하는 유일한 엔드포인트를 지정할 수 있습니다.

그래도 솔루션이 필요한 경우 다음과 같은 방법을 REST 컨트롤러에 넣습니다.

@RestController
public class myRestController{

    @GetMapping("/login")
    public String redirectTo(){
        return "yourRedirectLink";
    }

}

이 용액은 스프링을 사용하여 항아리에 포장하여 반응시키기에 매우 좋습니다.

프로젝트의 POM.xml 파일에서 아래의 종속성을 삭제/주석만 작성하면 됩니다.

    <!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-security</artifactId>-->
<!--        </dependency>-->

그리고.

    <!--        <dependency>-->
<!--            <groupId>org.springframework.security</groupId>-->
<!--            <artifactId>spring-security-test</artifactId>-->
<!--            <scope>test</scope>-->
<!--        </dependency>-->

이 코드는 나에게 완벽하게 작동했습니다. 프로젝트의 메인 클래스에 추가합니다.

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })

는 ★★★★★★★★★★★★★★★★★★..httpBasic().disable()브라우저에서는 아직 로그인 폼이 표시되어 있습니다.

도움이 되는 점(webflux):

security.exceptionHandling().authenticationEntryPoint { exchange, ex ->
    exchange.response.statusCode = HttpStatus.UNAUTHORIZED
    exchange.response.setComplete()
}

에서는 ★★★★★★★★★★★★★★★★★★★★.WWW-Authenticate이 http header에 합니다.HttpBasicServerAuthenticationEntryPoint를 누릅니다

언급URL : https://stackoverflow.com/questions/23636368/how-to-disable-spring-security-login-screen