2012-09-09 12 views
5

Jeśli aplikacja wykryła, że ​​użytkownik nie jest uwierzytelniony/autoryzowany do zrobienia czegoś, Czy to nieoczekiwane?Czy korzystanie z błędów uwierzytelniania/autoryzacji jest dobrą praktyką przy użyciu wyjątków?

try { 
    if (notAuth()) 
     throw new UnAuthException(); 
} catch (UnAuthException e) { 
    Log . error(e); 
    return false; 
} 

jeśli oczekuje się sprawa, więc dlaczego istnieje tak wiele ram mają własne UnAuthException przypadku niepowodzenia autoryzacji nie jest wyjątkiem?

Odpowiedz

4

Zależy od zakresu.

W logiki biznesowej warstwy „użytkownik nie jest uprawniony uwierzytelniony /” sytuacja jest wyjątkowa i powinna prowadzić do wyjątku czasu wykonywania, na przykład (kod Java):

public String salutation(User user) { 
    // may lead to a runtime exception if user is not authorized 
    return String.format("Hello, %s!", user.getName()); 
} 

Realizacja User (to interfejs , oczywiście) albo zwróci nazwę użytkownika, albo wyśle ​​NonAuthenticatedException w getName().

W kontrola dostępu warstwa Status autoryzacji użytkownika/Uwierzytelnianie jest przetwarzane jak innych normalnych stanów, i nie powinien być traktowany jako wyjątkowej sytuacji, np:

if (!user.isAuthenticated()) { 
    httpResponse.addHeader("WWW-Authenticate", "Basic realm=\"secure content\""); 
} 
+0

Dziękuję, Yeh, który jest logiczny, ale w pierwszy przykład Business Logic, gdzie powinien być wyjątek? Czy mógłbyś rozszerzyć ten przykład, włączając kod, który wyrzuca wyjątek i kod, który go obsługuje, przepraszam, ale jestem trochę zmieszany – Abdullah

+1

Zaktualizowałem moją odpowiedź. "Użytkownik" to interfejs, który zostanie zaimplementowany za pomocą uwierzytelnionego użytkownika, który zwraca jego nazwę z 'getName()' lub anonimowego użytkownika, który zgłasza wyjątek. – yegor256

+0

to jasne, dzięki. – Abdullah

1

Tak, jest to dobra praktyka, aby obsługiwać uwierzytelniania \ zezwoleń poprzez wyjątki, ponieważ:

1) Wyjątkiem jest nienormalna sytuacja, że ​​system nie podoba, a co za tym idzie przez obsługę wyjątków jesteśmy reakcji tej sytuacji . Uwierzytelnianie i wyjątki autoryzacji są w zasadzie naruszeniami bezpieczeństwa, tj. Anomaliami systemu i dobrą praktyką jest reagowanie na naruszenia. Schemat obsługi wyjątków to popularny mechanizm zgłaszania nieprawidłowości \ anomalii systemu, dlatego też używamy tego systemu do reagowania na takie sytuacje.

Dlatego wszystkie popularne frameworki (w tym .NET) mają Auth. klasy wyjątków do enkapsulacji błędów .

Powiązane problemy