스프링 보안 설정 - 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) 자체에 리스트가 있습니다.SecurityFilterChainSecurityFilterChain of of of of of of 의 목록이 있다Filter실제 로직을 실행하는 인스턴스.
WebSecurityConfigurerAdapter 위에 덧씌우세요.configure(HttpSecurity httpSecurity) 실제로 요.SecurityFilterChainspringSecurityFilterChain
?springSecurityFilterChain 「」를 합니다.SecurityFilterChain리스트에서요?boolean matches(HttpServletRequest request) 되어 있는 SecurityFilterChain인터페이스입니다.
★★★★★★★★★★★★★★★★★.HttpSecurity 때 합니다.SecurityFilterChain.
, 이제 제, 제WebSecurity제로로 작동 ?? ??? WebSecurity 할 수 .springSecurityFilterChain (오류)FilterChainProxy를 참조해 .springSecurityFilterChain성됩니니다다
은 ★★★★★★★★★★★★★★★입니다.performBuild의 of의 WebSecurity'만들기, 만들기, 만들기, 만들기'를 만들라고 합니다.springSecurityFilterChainbean.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;
}
이 등록하고 때 알 수 SecurityFilterChainspringSecurityFilterChain 한 개당web.ignoring()....에는 봄기운이 .DefaultSecurityFilterChain으로 행해지는 입니다.SecurityFilterChain리스트의 선두에 배치됩니다.
가 때springSecurityFilterChain의 목록을 하겠습니다.SecurityFilterChain 을 그 에 SecurityFilterChainspringSecurityFilterChain를 호출합니다.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 |