【问题标题】:SC_UNAUTHORIZED returns 403 in Spring BootSC_UNAUTHORIZED 在 Spring Boot 中返回 403
【发布时间】:2020-07-09 03:11:27
【问题描述】:

我有以下 JWT 过滤器

public class JwtRequestFilter extends OncePerRequestFilter {

    @Autowired
    private MyUserDetailsService userDetailsService;

    @Autowired
    private JwtUtil jwtUtil;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException, MalformedJwtException {

        final String authorizationHeader = request.getHeader("Authorization");

        String username = null;
        String jwt = null;

        try {
            if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
                jwt = authorizationHeader.substring(7);
                username = jwtUtil.extractUsername(jwt);
            }
        } catch (MalformedJwtException e) {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        }

        ...

        chain.doFilter(request, response);
    }

但由于某种原因,我仍然得到 403 响应而不是 401。

{
   "timestamp": "2020-07-08T15:59:50.696+0000",
   "status": 403,
   "error": "Forbidden",
   "message": "Access Denied",
   "path": "/ping"
}

知道可能是什么问题吗?我尝试了不同的回报,但它们都是 500 或 403。

【问题讨论】:

  • @KavithakaranKanapathippillai 这样做使响应没有正文,它只返回401,但没有别的。有没有办法保持与问题相同的正文(状态、错误、消息等),但只需将 403 更改为 401?

标签: spring spring-boot jwt http-status-code-403 http-status-code-401


【解决方案1】:
  • 由于您是直接处理响应,因此您必须执行类似的操作
    StringBuilder sb = new StringBuilder();
    sb.append("{ ");
    sb.append("\"error\": \"Unauthorized\" ");
    sb.append("\"message\": \"Unauthorized\"");
    sb.append("\"path\": \"")
      .append(request.getRequestURL())
      .append("\"");
    sb.append("} ");

    response.setContentType("application/json");
    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);  
    response.getWriter().write(sb.toString());
    return;

【讨论】:

  • 不幸的是,使用 sendError 而不是 setStatus 会使响应保持在 403。
  • 是的,我只是复制粘贴了你的块。
猜你喜欢
  • 2021-07-14
  • 2023-03-12
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2010-09-07
  • 2020-10-07
  • 2022-10-04
  • 2016-11-23
相关资源
最近更新 更多