java小菜机一枚 2023-09-25 08:36 采纳率: 91.3%
浏览 6
已结题

springsecurity中的问题

springsecurity中的问题

我在UserDetailsServiceImpl中的loadUserByUsername方法中抛出了异常,但是到失败处理器中捕获到的异常并不是我抛出的异常,代码是这样的
UserDetailsServiceImpl.java

@Override
      public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        LoginDto member = memberMapper.getMemberByUsername(username);
        if (ObjectUtil.isEmpty(member)) {
            throw new UsernameNotFoundException(ResultEnum.userNotExist.getMessage());
        }
        if (!Objects.equals(member.getStatus(), StatusCode.status.getCode())) {
            throw new UsernameNotFoundException(ResultEnum.accountBanned.getMessage());
        }
        return new CustomUser(member, Collections.emptyList());
    }

失败处理器

 @Override
    protected void unsuccessfulAuthentication(HttpServletRequest request,HttpServletResponse response,AuthenticationException authenticationException) throws IOException,ServletException {
        if (authenticationException.getCause() instanceof RuntimeException) {
            ResponseUtil.out(response,new Result(ResultEnum.accessDenied.getCode(),ResultEnum.accessDenied.getMessage()));
        } else {
            ResponseUtil.out(response,new Result(ResultEnum.accountOrPasswordError.getCode(),ResultEnum.accountOrPasswordError.getMessage()));
        }
    }
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-25 09:06
    关注

    引自免费应用 皆我百晓生 小程序,希望对题主有所帮助,如有帮助,还请采纳。


    根据您提供的代码,我注意到您在 loadUserByUsername 方法中,当用户不存在或账户被封禁时抛出了 UsernameNotFoundException 异常。然后,您在失败处理器中处理认证异常时,检查了 authenticationException.getCause() 是否为 RuntimeException 异常,并根据结果返回不同的错误信息。

    这里有几个问题可能导致您没有捕获到预期的异常:

    1. 检查异常类型:您可以尝试使用 authenticationException instanceof UsernameNotFoundException 来检查异常的类型,而不仅仅是检查原因。这样可以更加准确地处理预期的异常。

    2. 异常包装:在代码中没有显示的异常包装情况下,getCause() 返回的异常可能是原始的 UsernameNotFoundException,也可能是 Spring Security 在抛出异常时进行了包装。您可以尝试打印异常栈信息,以查看其中是否包含您预期的异常信息。

    3. 自定义异常处理器:如果以上两点都没有解决问题,那么可能是您的自定义异常处理器没有正确配置或被覆盖。请确保您的异常处理器被正确注册,并且在 Spring Security 的配置中指定了正确的失败处理器。

    您可以尝试使用以上建议的方式来调试和解决问题。如果问题仍然存在,请提供更多的代码和配置信息以便更好地帮助您解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月26日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 C++ 菜单窗口独立出来,可以随意移动放大缩小。
  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?