2012-07-26 1 views
1

나는 그의 권한과 입력 매개 변수의 조합을 기반으로 사용자를 인증해야하는 시나리오가 있습니다.스프링 보안 authrorize 입력 매개 변수 조건을 기준으로

이 현재의 시나리오를하다

public void bookTicket(String bookingType) 
    { 
    if (bookingType == "AIR"){ 
     bookAirTicket(); 
    }else{ 
     bookBusTicket(); 
    } 
    } 


@PreAuthorize("hasRole('BOOK_AIR')") 
private void bookAirTicket(){ 
} 

@PreAuthorize("hasRole('BOOK_BUS')") 
private void bookBusTicket(){ 
} 

우리는 입력에 기반을 둔 내가 허가를 받아야 기본적으로

@PreAuthorize(("hasRole('BOOK_AIR')" AND bookinType='AIR') OR ("hasRole('BOOK_BUS')" AND bookinType='BUS')) 
public void bookTicket(String bookingType) 
    { 
    if (bookingType == "AIR"){ 
     bookAirTicket(); 
    }else{ 
     bookBusTicket(); 
    } 
    } 

처럼 어떤 일이

감사 매개 변수 가질 수

+0

''ConsensusBased' 결정을하기 위해''AccessDecisionVoter'에 대해 읽을 수 있습니다. – ipavlic

답변

1

예, 할 수 있습니다 . 매개 변수는 Spring EL 변수로 접근 할 수있다. 사실 참조 설명서에는 several examples which use method parameters이 나와 있습니다. 클래스는 디버그 심볼을 사용하여 컴파일해야합니다 (일반적으로 그렇습니다). 주석 값이 하나의 표현 문자열입니다

주 : 실제로

"(hasRole('BOOK_AIR') and #bookinType == 'AIR') or (hasRole('BOOK_BUS') and #bookinType='BUS')" 

, 복잡한 표현식을 사용하여 오히려 오류가 발생하기 쉬운입니다. 또한 accessChecker 사실이나 제공된 조작 정보가 허용되는지 여부에 따라 false를 반환하는 "확인"방법을 사용하여 응용 프로그램 컨텍스트에서 빈입니다

"@accessChecker.check('book', #bookinType)" 

같은 간단한 표현, 뭔가를 사용할 수있다 (당신은 확인하실 수 있습니다 보안 컨텍스트에 직접 액세스하여 현재 사용자의 역할 - SO에서 다른 곳에서 논의 된 내용을 참조하십시오).

자신의 AccessDecisionManager 또는 AccessDecisionVoter을 작성하여 기능을 플러그인 할 수는 있지만 더 많은 내부 지식이 필요합니다.

관련 문제