[java] HttpSecurity, WebSecurity 및 AuthenticationManagerBuilder

사람이 대체 할 때 설명 할 수있는 configure(HttpSecurity), configure(WebSecurity)그리고 configure(AuthenticationManagerBuilder)?



답변

configure (AuthenticationManagerBuilder) 는 AuthenticationProviders를 쉽게 추가 할 수 있도록하여 인증 메커니즘을 설정하는 데 사용됩니다. 예를 들어 다음은 내장 된 ‘user’및 ‘admin’로그인으로 메모리 내 인증을 정의합니다.

public void configure(AuthenticationManagerBuilder auth) {
    auth
        .inMemoryAuthentication()
        .withUser("user")
        .password("password")
        .roles("USER")
    .and()
        .withUser("admin")
        .password("password")
        .roles("ADMIN","USER");
}

configure (HttpSecurity)를 사용하면 선택 일치를 기반으로 리소스 수준에서 웹 기반 보안을 구성 할 수 있습니다. 예를 들어 아래 예에서는 / admin /으로 시작하는 URL을 ADMIN 역할을 가진 사용자로 제한하고 다른 URL이 있어야 함을 선언합니다. 성공적으로 인증되었습니다.

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated()
}

configure (WebSecurity) 는 전역 보안에 영향을주는 구성 설정에 사용됩니다 (자원 무시, 디버그 모드 설정, 사용자 지정 방화벽 정의를 구현하여 요청 거부). 예를 들어, 다음 메서드는 인증 목적으로 / resources /로 시작하는 모든 요청을 무시하도록합니다.

public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/resources/**");
}

자세한 내용은 다음 링크를 참조하십시오. Spring Security Java Config Preview : Web Security


답변

WebSecurity ignoring()메서드 의 일반적인 사용 은 Spring Security를 ​​생략 하고 Spring Security의 기능을 사용할 수 없습니다. WebSecurity는 HttpSecurity를 ​​기반으로합니다.

@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에 unconsidered .

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

configure(HttpSecurity)선택 일치를 기반으로 리소스 수준 에서 웹 기반 보안을 구성 할 수 있습니다 . 예를 들어 아래 예에서는로 시작하는 URL을 ADMIN 역할/admin/ 을 가진 사용자로 제한하고 다른 모든 URL을 성공적으로 인증 해야한다고 선언 합니다.

configure(WebSecurity)전역 보안에 영향주는 구성 설정에 사용됩니다 (자원 무시, 디버그 모드 설정, 사용자 지정 방화벽 정의를 구현하여 요청 거부). 예를 들어, 다음과 같은 방법으로 시작하는 모든 요청 원인이 /resources/인증 무시 목적.

AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>

SecurityBuilder는 AuthenticationManager. 메모리 인증, LDAP 인증, JDBC 기반 인증, UserDetailsService 추가 및 AuthenticationProvider의 추가 를 쉽게 구축 할 수 있습니다 .

@Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
        auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
     }


답변