当前位置: 首页 > 知识库问答 >
问题:

当Spring SecurityContextHolder在GetPrincipal上返回null时,应该引发哪个异常?

燕宜修
2023-03-14

然而,系统的规模越来越大,可能会出现一个错误,即未经授权的用户会通过控制器层,试图通过自定义授权服务访问受保护的数据。

一方面,最适合的异常似乎是accessdeniedexception(Http 403),但另一方面,抛出500或404以“隐藏”所请求资源的存在可能是更安全的方法

我考虑了以下例外情况:

    null

共有1个答案

梁丘琛
2023-03-14

如果您正在使用Spring Security和一个自定义授权服务,那么您可能会有如下内容:

@Component
public class CustomAccessDeniedHandler extends AccessDeniedHandlerImpl {
    private final String HOME_PAGE = "/index.html";

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) throws IOException, ServletException {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();

        if (auth != null) {

            if (auth instanceof AnonymousAuthenticationToken) {
                response.sendRedirect("/#/login");
                super.handle(request, response, e);
                return;
            }

            if (auth.getAuthorities().iterator().next().getAuthority().equals("ROLE_EMPLOYEE") || auth.getAuthorities().iterator().next().getAuthority().equals("ROLE_ADMIN") ) {
                 response.sendRedirect("/dashboard/Dashboard.xhtml");
                 super.handle(request, response, e);
                 return;
            }     
             response.sendRedirect("/#/dashboard/user");        
        }
        super.handle(request, response, e);
    }
}  

在您的情况下,在应用程序中,我宁愿建议重定向到登录屏幕--如上图所示--带有类似请登录的消息。

在API中,我将返回404-Resource not found响应。

 类似资料:
  • 我希望在数据库中找不到该项时出现异常

  • 我正在用Python编写一个简单的API客户端,我想知道如果远程服务器不满意,我应该引发什么异常。 API本身的文档记录非常糟糕(我不知道所有可能的错误消息,所以我不能为所有这些消息定义自定义类),我让请求处理HTTP级别的错误,在这些情况下会引发,但是如果服务器在JSON响应中只提供键,我应该引发什么呢? 我目前使用的是,但感觉非常广泛,我想知道是否有更好的替代方案。 问候。

  • 我目前正在一个后端有Spring,前端有Angularjs的网站上工作,我们已经讨论了后端响应以处理前端的消息对话框,我有一个问题要问: 假设我有一个API: 若客户机发出一个带有无效参数(如字符串)的请求,那个么应该从服务器返回哪个响应代码?HTTP 400错误的请求和响应正文包含消息“fromTime和toTime应采用时间戳格式”,还是HTTP 200包含相同的消息? 我看到了一些Googl

  • 你好,我有一个问题与elasticsearch php api,Elastica。 如果我运行这个: 我得到0个结果

  • 我在做一个基于线性探测的自定义哈希表,在C 11中,我在其中做了一个函数,函数应该返回哈希表中对应键的值,这是我的代码: 问题是,传递的每个键在哈希表中可能没有对应的值。在这个函数中,我无法获得如何处理这个异常。处理这个异常的可能方法是什么?C STL

  • 问题内容: 我的一个朋友以这种奇怪的行为来到我这里,我无法解释,任何见解的观点都将不胜感激。 我正在运行VS 2005(C#2.0),以下代码显示了该行为 上面的代码,打印“ 0”,清楚地表明它应该有返回-1 这在Java中也会发生,其中以下类显示了该行为: 我正在运行Java 1.6.0_17 问题答案: 这不是规则的例外,而是方法和定义的自然结果。 您声称应该返回。这基本上等于应返回的索赔。为