2012-09-09 40 views
5

如果应用程序发现用户未通过身份验证/授权来执行某些操作,那么这是一件意外的事情吗?使用异常处理身份验证/授权错误是否是一种很好的做法?

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

如果预期的情况下,为什么有这么多的框架都有自己的UnAuthException如果失败验证也不例外?

回答

4

取决于范围。

业务逻辑层“用户未授权/认证”的情况是例外的,应该导致运行时异常,例如(Java代码):

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

User(实现它的接口当然)将返回用户的名字或者在getName()中抛出NonAuthenticatedException

访问控制层用户授权/认证状态被处理为任何其他正常的状态,而不应被视为特殊情况,如:

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

谢谢你,叶这是逻辑,但在第一个商业逻辑示例,例外应该在哪里?请问您可以通过添加抛出异常的代码和处理它的代码来扩展示例,但很抱歉,我很困惑 – Abdullah

+1

我已经更新了我的答案。 'User'是一个接口,它将通过一个经过认证的用户来实现,该用户从'getName()'返回其名称或者引发异常的匿名用户。 – yegor256

+0

这很清楚,谢谢。 – Abdullah

1

是的,这是一个很好的做法通过例外处理身份验证\授权,因为:

1)一个例外是异常的情况,系统不一样,因此通过异常处理 我们反应,这种情况。身份验证和授权例外基本上是安全违规,即系统异常,并且对违规行为做出响应是一种很好的做法。异常处理框架是 一个流行的机制来报告违反\系统异常,因此我们使用这个框架来应对这种情况。

这就是为什么所有流行的框架(包括.NET)都有Auth。异常类来封装 错误。

相关问题