스프링 보안 로그인 화면을 비활성화하려면 어떻게 해야 합니까?
사용하고 있다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
'source' 카테고리의 다른 글
업로드한 파일을 wp-content/uploads로 이동할 수 없습니다. (0) | 2023.02.12 |
---|---|
react Material-ui. onClick for 버튼을 사용할 수 있는지 어떻게 알 수 있습니까? (0) | 2023.02.12 |
들어오는 장고 요청의 JSON 데이터는 어디 있나요? (0) | 2023.02.08 |
UNION을 사용할 때 json[] 유형의 등호 연산자를 식별할 수 없습니다. (0) | 2023.02.08 |
testing-library-react의 "update was not wraped in act()" 경고를 해결하려면 어떻게 해야 합니까? (0) | 2023.02.08 |