义齿


バージョン:
spring security 2.1.0.RELEASE
 
状況の構成:
インタフェースに注記が追加されました.
@PreAuthorize("hasRole('ROLE_AAA')")
@RequestMapping("/hello0")
public String hello(){
    return "HELLO";
}

 
WebSecurityConfigurerAdapterでコードが構成されています.
http.exceptionHandling()
                .authenticationEntryPoint(this.securityAuthenticateFailureHandler)
                .accessDeniedHandler(this.securityAccessDeniedHandler);

http.cors().and()
                //      URL     
                .anyRequest().authenticated();

アクセスインタフェース:/hello 0、エラーにアクセスできないことを報告し、設定を実行していないaccessDeniedHandler
 
理由:@PreAuthorize注記の異常は、AccessDeniedException異常を放出し、accessDeniedHandlerに捕獲されず、グローバル異常に捕獲されます.
サンプルコード:
@RestControllerAdvice
public class GlobalExceptionHandler {

    //       
    @ExceptionHandler(AccessDeniedException.class)
    public BaseResponse handleAccessDeniedException(AccessDeniedException e){
        return BaseResponse.failure(403, "        ");
    }

}

accessDeniedHandlerによって処理をキャプチャする必要がある場合は、コードをこのように書く必要があります.
http.cors().and()
                .authorizeRequests().antMatchers("/hello0").permitAll()

                  hasRole ,      ,
                      accessDeniedHandler  ,

                .antMatchers("/hello0").hasRole("AAA")

                .anyRequest().authenticated();