programing

WebSecurityConfigurerAdapter의 WebSecurity 올바른 사용

stoneblock 2023. 9. 1. 20:32

WebSecurityConfigurerAdapter의 WebSecurity 올바른 사용

버전 1.3.0을 기반으로 하는 내 Spring Boot 애플리케이션에서.BUILD-SNAPHOT, 정적 리소스(이미지, CSS, js)가static아래 폴더resources.

다음과 같은 보안 구성과 관련된 몇 가지 예가 표시됩니다.

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(final WebSecurity web) throws Exception {
        web.ignoring()
           .antMatchers("/static/**");
    }
}

그 예가 맞습니까?어떤 효과가 있어야 합니까?작동하는지 확인하는 방법(예: 요청 수행)localhost:8080/something어떤 멋진 일들을 할 수 있습니까?WebSecurity?

예제는 Spring(웹) Security가 사용자가 정의한 식과 일치하는 URL 패턴을 무시하고 있음을 의미합니다.("/static/**")이 URL은 Spring Security에서 건너뜁니다. 따라서 보안되지 않습니다.

스프링 보안에서 무시해야 하는 RequestMatcher 인스턴스를 추가할 수 있습니다.Spring Security에서 제공하는 웹 보안(SecurityContext 포함)은 일치하는 HttpServletRequest에서 사용할 수 없습니다.일반적으로 등록된 요청은 정적 리소스의 요청이어야 합니다.동적 요청의 경우 모든 사용자를 대신 허용하도록 요청을 매핑하는 것이 좋습니다.

자세한 내용은 WebSecurity API 설명서를 참조하십시오.

원하는 만큼의 URL 패턴을 보안 또는 보안 해제할 수 있습니다.
Spring Security를 사용하면 응용프로그램의 웹 계층에 대한 인증 및 액세스 제어 기능이 있습니다.또한 지정된 역할을 가진 사용자가 특정 URL 등에 액세스하도록 제한할 수 있습니다.

자세한 내용은 Spring Security 참조를 참조하십시오.
http://docs.spring.io/spring-security/site/docs/current/reference/html/


URL 패턴 순서 우선순위

수신 요청에 대해 지정된 패턴을 일치시킬 때 요소가 선언된 순서대로 일치가 수행됩니다.따라서 가장 구체적인 일치 패턴이 먼저 오고 가장 일반적인 일치 패턴이 마지막에 와야 합니다.

http에 여러 자식이 있습니다.authorizeRequests() 메서드는 선언된 순서대로 각 매칭이 고려됩니다.

패턴은 항상 정의된 순서대로 평가됩니다.따라서 덜 구체적인 패턴보다 목록에서 더 구체적인 패턴을 더 높게 정의하는 것이 중요합니다.

자세한 내용은 여기를 참조하십시오.
http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/ #filter-security-filter


예 1

웹안인사ignoring()메서드에서 Spring Security를 생략하고 Spring Security의 기능을 사용할 수 없습니다.는 HttpSecurity " HttpSecurity " 위에 을 두고 있습니다.
과 같이 쓸 수 .)<http pattern="/resources/**" security="none"/>).

@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();
}

이 WebSecurity Spring을 무시하도록 합니다./resources/**그리고./publics/** 그므로러로..antMatchers("/publics/**").hasRole("USER")HttpSecurity에서는 고려되지 않습니다.

이렇게 하면 보안 필터 체인에서 요청 패턴이 완전히 생략됩니다.그러면 이 경로와 일치하는 모든 항목에 인증 또는 권한 부여 서비스가 적용되지 않으며 자유롭게 액세스할 수 있습니다.


예 2

패턴은 항상 순서대로 평가됩니다.첫 번째 일치가 모든 요청과 일치하고 두 번째 일치가 적용되지 않으므로 다음 일치는 유효하지 않습니다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/**").hasRole("USER")
        .antMatchers("/admin/**").hasRole("ADMIN"):
}

음, 당신이 공유한 코드에서, 만약 당신의 정적 파일들, 예를 들어 CSS/JS 등이 정적이라고 불리는 폴더에 있다면, 당신의 모든 정적 자원들이 페이지에 추가될 것입니다.

web.ignoring()
    .antMatchers("/static/**");

정적 리소스가 로드되지 않습니다.

Spring Security는 매우 강력합니다. Spring은 훌륭한 문서를 가지고 있기 때문에 여러분은 그것에 대해 충분히 감사하고 이해해야 합니다.

여기 링크가 있습니다.

언급URL : https://stackoverflow.com/questions/31995221/correct-use-of-websecurity-in-websecurityconfigureradapter