如果应用程序发现某个用户未经过身份验证/授权执行某项操作,那是否是意料之外的事情?
try {
if (notAuth())
throw new UnAuthException();
} catch (UnAuthException e) {
Log . error(e);
return false;
}
如果是预期的情况,那么为什么有这么多框架有自己的UnAuthException
如果失败的Auth不是例外?
答案 0 :(得分: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\"");
}
答案 1 :(得分:1)
是的,通过例外处理身份验证\授权是一种很好的做法,因为:
1)异常是系统不喜欢的异常情况,因此通过异常处理 我们正在对这种情况作出反应。认证和授权例外基本上是安全违规,即系统 异常,应对违规行为是一种好习惯。异常处理框架是 报告违规行为\系统异常的流行机制,因此我们使用此框架对此类情况做出反应。
这就是为什么所有流行的框架(包括.NET)都有Auth。要封装的异常类 错误。