【发布时间】:2020-02-18 05:04:09
【问题描述】:
哪个异常最适合描述 RESTful 设计中缺少 Spring Security Principal,例如,当我从 SecurityContextHolder.getContext().getAuthentication().getPrincipal() 获取 Principal 时得到 null?
我有一个带有自定义授权服务的项目,其中一部分需要有关已登录的委托人以及他拥有哪些权限的信息。
一些(但不是全部)REST 端点也受到 Spring Security 的保护。
然而系统变得越来越大并且可能发生错误,未经授权的用户将通过控制器层,并试图通过自定义授权服务访问受保护的数据。
一方面,最适合的异常似乎是AccessDeniedException(Http 403),但另一方面,抛出 500 或 404 以“隐藏”请求的存在可能是一种更安全的方法资源。
我想到了以下例外:
- HttpStatus: 500 由
org.springframework.security.access.AuthorizationServiceException引起 - HttpStatus: 403
org.springframework.security.access.AccessDeniedException - HttpStatus: 500
caused by java.lang.IllegalStateException - HttpStatus: 500
caused by java.lang.NullPointerException
我不相信哪种方法更好 - 禁止、隐藏或抛出内部服务器错误。
【问题讨论】:
标签: java spring rest spring-security