5

如果应用程序发现用户没有经过身份验证/授权做某事,那是不是出乎意料?

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

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

4

2 回答 2

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将返回用户名或抛出一个NonAuthenticatedException.getName()

访问控制层中,用户授权/认证状态被当作任何其他正常状态处理,不应被视为异常情况,例如:

if (!user.isAuthenticated()) {
  httpResponse.addHeader("WWW-Authenticate", "Basic realm=\"secure content\"");
}
于 2012-09-09T08:19:17.597 回答
1

是的,通过异常处理身份验证\授权是一个好习惯,因为:

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

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

于 2012-09-09T07:05:09.643 回答