为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 Spring Boot 中配置 OAuth2 以使用 JSON 而不是 HTML 来响应

是否可以在 Spring Boot 中配置 OAuth2 以使用 JSON 而不是 HTML 来响应

炎炎设计 2023-12-04 15:03:58
我的 Spring Boot 应用程序用于OAuth2安全和令牌管理。我正在使用无效令牌查询我的 REST 端点之一,以使用 Postman 测试其响应。端点正确响应 401 InvalidTokenException,但当我希望它响应 JSON 时,响应内容是 HTML。这可以通过代码完成吗?响应示例<InvalidTokenException>      <error>invalid_token</error>      <error_description>Access token expired: … my token… </error_description>      </InvalidTokenException>
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

详细说明 zfChaos 的答案,这是一个很好的线索,但没有提供足够的信息来使响应成为 JSON 响应:


您还应该设置内容类型和字符编码。然后,编写您的 JSON 响应(在本例中我使用了一个简单的 String,当然使用类和 an 会更方便ObjectMapper)。


这是一个完整的例子:


@Configuration

public class SecurityConfiguration extends WebSecurityConfigurerAdapter {


    @Override

    public void configure(HttpSecurity httpSecurity) throws Exception {

        httpSecurity

                .oauth2Login(login -> login

                        .failureHandler((request, response, exception) -> {

                            response.setContentType("application/json");

                            response.setStatus(401);

                            response.setCharacterEncoding("UTF-8");

                            response.getWriter().write("{ \"msg\": \"foo\" }");

                        })

                );

    }

}


查看完整回答
反对 回复 2023-12-04
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

将自定义添加AuthenticationFailureHandler到您的安全配置,然后在自定义实现中准备响应:


http.oauth2Login()

    .failureHandler(customFailureHandler)

失败处理程序示例:


public class CustomFailureHandler extends SimpleUrlAuthenticationFailureHandler {

    @Override

    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException {

        response.sendError(401, "XML HERE");

    }

}


查看完整回答
反对 回复 2023-12-04
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信