스프링 보안 설정 - Http Security vs Web Security
Spring Security Configuration의 내용을 이해해야 합니다.아래 예를 사용하여...
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests().antMatchers("/secret/**").authenticated()
.and()
.authorizeRequests().antMatchers("/**").permitAll();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**");
}
}
의 목적은 무엇입니까?configure(WebSecurity web)
방법?
그냥 추가하면 안 돼요?/resources/**
에서configure(HttpSecurity http)
이 행의 방법.authorizeRequests().antMatchers("/**", "/resources/**").permitAll();
같은 방법으로 모든 요청을 허용해야 하지 않을까요?/resources/**
어떤 인증도 없이요?
Web Security의 일반적인 사용ignoring()
메서드는 Spring Security를 생략하고 Spring Security 기능을 사용할 수 없습니다.Web Security는 Http Security를 기반으로 합니다.
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**")
.antMatchers("/publics/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/publics/**").hasRole("USER") // no effect
.anyRequest().authenticated();
}
위의 예에서 Web Security는 Spring이 무시하도록 합니다./resources/**
그리고./publics/**
따라서,.antMatchers("/publics/**").hasRole("USER")
HttpSecurity는 무시됩니다.
이렇게 하면 보안 필터 체인에서 요청 패턴이 완전히 생략됩니다.이 경로와 일치하는 것은 인증 또는 인가 서비스가 적용되지 않으며 자유롭게 액세스할 수 있습니다.
configure(HttpSecurity)
그럼 선택 일치에 따라 리소스 수준에서 웹 기반 보안을 설정할 수 있습니다.다음 예시는 로 시작하는 URL을 제한하고 있습니다./admin/
다른 URL을 정상적으로 인증할 필요가 있음을 선언합니다.
configure(WebSecurity)
는 글로벌 보안에 영향을 주는 설정(리소스 추가, 디버깅모드 설정, 커스텀방화벽 정의 구현에 의한 요구 거부)에 사용됩니다.예를 들어, 다음 방법은 다음과 같이 시작하는 모든 요청을 발생시킵니다./resources/
무시됩니다.
다음 코드를 생각해 봅시다.두 가지 방법을 모두 사용하여 antMatchers 내에서 제공되는 엔드포인트 인증을 무시할 수 있습니다.
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/login", "/register", "/api/public/**");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/login", "/register", "/api/public/**").permitAll()
.anyRequest().authenticated();
}
configure(WebSecurity web)
이 방법으로 사용되는 엔드포인트는 스프링보안 필터를 무시하고 보안 기능(시큐어 헤더, CSRF 보호 등)도 무시되며 보안 컨텍스트는 설정되지 않으며 크로스 사이트 스크립팅, XSS 공격, 콘텐츠스니핑용 엔드포인트를 보호할 수 없습니다.configure(HttpSecurity http)
이 방법으로 사용되는 엔드포인트는 antMatchers에서 사용되는 엔드포인트 인증을 무시하며 보안 헤더, CSRF 보호 등의 기타 보안 기능이 활성화됩니다.
사용할 때HttpSecurity
그리고 하려고 한다.permitAll()
요청한다.Spring Security Filter Chain에서 요청에 액세스할 수 있습니다.이 필터 체인에는 인증/허가에 따라 허용 또는 금지해야 하는 다른 요구도 있기 때문에 비용이 많이 듭니다.
HttpSecurity.authorizeRequests().antMatchers("/**", "/resources/**").permitAll();
을 할 때 ""에 대한 resources
스프링 보안 필터 체인을 모두 통과합니다.이미지를 보거나 Javascript 파일을 읽기 위해 인증/허가가 필요 없기 때문에 안전합니다.
WebSecurity.ignoring().antMatchers("/resources/**");
코드를 포함시켜 훌륭한 답변에 기여하고 싶습니다.한 세 . 콩이 있습니다.DelegatingFilterProxy
,FilterChainProxy
★★★★★★★★★★★★★★★★★」SecurityFilterChain
.
DelegatingFilterProxy
는, 「Bean」 하는 합니다.FilterChainProxy
그 이름은springSecurityFilterChain
, , , , 입니다.FilterChainProxy
는 다음과 구성되어 있습니다.
@Bean(
name = {"springSecurityFilterChain"}
)
public Filter springSecurityFilterChain() throws Exception {
boolean hasConfigurers = this.webSecurityConfigurers != null && !this.webSecurityConfigurers.isEmpty();
if (!hasConfigurers) {
WebSecurityConfigurerAdapter adapter = (WebSecurityConfigurerAdapter)this.objectObjectPostProcessor.postProcess(new WebSecurityConfigurerAdapter() {
});
this.webSecurity.apply(adapter);
}
return (Filter)this.webSecurity.build();
}
springSecurityFilterChain
(오류)FilterChainProxy
) 자체에 리스트가 있습니다.SecurityFilterChain
SecurityFilterChain
of of of of of of 의 목록이 있다Filter
실제 로직을 실행하는 인스턴스.
WebSecurityConfigurerAdapter
위에 덧씌우세요.configure(HttpSecurity httpSecurity)
실제로 요.SecurityFilterChain
springSecurityFilterChain
?springSecurityFilterChain
「」를 합니다.SecurityFilterChain
리스트에서요?boolean matches(HttpServletRequest request)
되어 있는 SecurityFilterChain
인터페이스입니다.
★★★★★★★★★★★★★★★★★.HttpSecurity
때 합니다.SecurityFilterChain
.
, 이제 제, 제WebSecurity
제로로 작동 ?? ??? WebSecurity
할 수 .springSecurityFilterChain
(오류)FilterChainProxy
를 참조해 .springSecurityFilterChain
성됩니니다다
은 ★★★★★★★★★★★★★★★입니다.performBuild
의 of의 WebSecurity
'만들기, 만들기, 만들기, 만들기'를 만들라고 합니다.springSecurityFilterChain
bean.bean.contract.
@Override
protected Filter performBuild() throws Exception {
Assert.state(
!securityFilterChainBuilders.isEmpty(),
() -> "At least one SecurityBuilder<? extends SecurityFilterChain> needs to be specified. "
+ "Typically this done by adding a @Configuration that extends WebSecurityConfigurerAdapter. "
+ "More advanced users can invoke "
+ WebSecurity.class.getSimpleName()
+ ".addSecurityFilterChainBuilder directly");
int chainSize = ignoredRequests.size() + securityFilterChainBuilders.size();
List<SecurityFilterChain> securityFilterChains = new ArrayList<>(
chainSize);
for (RequestMatcher ignoredRequest : ignoredRequests) {
securityFilterChains.add(new DefaultSecurityFilterChain(ignoredRequest));
}
for (SecurityBuilder<? extends SecurityFilterChain> securityFilterChainBuilder : securityFilterChainBuilders) {
securityFilterChains.add(securityFilterChainBuilder.build());
}
FilterChainProxy filterChainProxy = new FilterChainProxy(securityFilterChains);
if (httpFirewall != null) {
filterChainProxy.setFirewall(httpFirewall);
}
filterChainProxy.afterPropertiesSet();
Filter result = filterChainProxy;
if (debugEnabled) {
logger.warn("\n\n"
+ "********************************************************************\n"
+ "********** Security debugging is enabled. *************\n"
+ "********** This may include sensitive information. *************\n"
+ "********** Do not use in a production system! *************\n"
+ "********************************************************************\n\n");
result = new DebugFilter(filterChainProxy);
}
postBuildAction.run();
return result;
}
이 등록하고 때 알 수 SecurityFilterChain
springSecurityFilterChain
한 개당web.ignoring()....
에는 봄기운이 .DefaultSecurityFilterChain
으로 행해지는 입니다.SecurityFilterChain
리스트의 선두에 배치됩니다.
가 때springSecurityFilterChain
의 목록을 하겠습니다.SecurityFilterChain
을 그 에 SecurityFilterChain
springSecurityFilterChain
를 호출합니다.match
SecurityFilterChain
. "/resources/**" 입니다Spring
는 요구 을 "필터링"의에 위임합니다.DefaultSecurityFilterChain
에 있는 의 커스텀 「」의 선두에 있는 것.SecurityFilterChain
하다
for (SecurityBuilder<? extends SecurityFilterChain> securityFilterChainBuilder : securityFilterChainBuilders) {
securityFilterChains.add(securityFilterChainBuilder.build());
}
완전히 무시당했어요
configure (Http Security) : 특정 HTTP 요구에 대해 웹 기반 보안을 설정할 수 있습니다.선택 일치에 따라 리소스 수준에서 웹 기반 보안을 구성하는 데 사용됩니다.
configure (Web Security) : 스프링보안에서 무시해야 하는 RequestMatcher 인스턴스를 추가할 수 있습니다.
언급URL : https://stackoverflow.com/questions/56388865/spring-security-configuration-httpsecurity-vs-websecurity
'programing' 카테고리의 다른 글
리모트 wp-admin이 localhost로 리다이렉트 되는 이유는 무엇입니까? (0) | 2023.03.27 |
---|---|
GSON에서의 범용 타입의 시리얼화 해제 (0) | 2023.03.27 |
JsonObject 속성을 통해 반복 (0) | 2023.03.27 |
Jest와 효소의 차이점은 무엇입니까? (0) | 2023.03.27 |
wordpress에서 캐시를 사용하지 않도록 설정하는 방법 (0) | 2023.03.27 |