如果应用程序发现用户没有经过身份验证/授权做某事,那是不是出乎意料?
try {
if (notAuth())
throw new UnAuthException();
} catch (UnAuthException e) {
Log . error(e);
return false;
}
如果是预期的情况,那么为什么有这么多框架都有自己的UnAuthException
,如果验证失败也不例外?
如果应用程序发现用户没有经过身份验证/授权做某事,那是不是出乎意料?
try {
if (notAuth())
throw new UnAuthException();
} catch (UnAuthException e) {
Log . error(e);
return false;
}
如果是预期的情况,那么为什么有这么多框架都有自己的UnAuthException
,如果验证失败也不例外?
取决于范围。
在业务逻辑层“用户未授权/认证”的情况是异常的,应该会导致运行时异常,例如(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\"");
}
是的,通过异常处理身份验证\授权是一个好习惯,因为:
1) 异常是系统不喜欢的异常情况,因此通过异常处理我们对这种情况做出反应。身份验证和授权异常基本上是安全违规,即系统异常,对违规做出响应是一种很好的做法。异常处理框架是一种流行的报告违规\系统异常的机制,因此我们使用这个框架来应对这种情况。
这就是为什么所有流行的框架(包括 .NET)都有 Auth。封装错误的异常类。