fids 2024-01-10 19:43 采纳率: 38.5%
浏览 8
已结题

oauth2回调接口进不去

spring-boot-starter-oauth2-client接入三方sso,为什么运行不起来,重定向uri是“/code”,但是登录成功后,会报[authorization_request_not_found],“/code”回调接口进不去(第一行日志都打不出来),但是放开response.sendRedirect("/home"),是可以到home接口的,这究竟是为什么,回调接口不是用来回调根据code处理逻辑的吗,为什么就是进不去,代码如下:


protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf()
                .disable()
                .authorizeRequests()
                .antMatchers("/code")
                .permitAll()
                .anyRequest().authenticated()
                .and()
                .oauth2Login()
                .redirectionEndpoint()
                .baseUri("/code")
                .and()
                .successHandler((request, response, authentication) -> {
                    log.info("登陆成功,{}",authentication);
                    // 重定向到业务系统前端
                    //response.sendRedirect("/home");
                })
                .failureHandler((request, response, exception) -> log.info("登陆失败,{}", exception.getMessage()))
                .permitAll()
                ;
    }

controller中

 @RequestMapping("/home")
    public String homepage(@AuthenticationPrincipal OAuth2User principal) {
        log.info("principal:{}", JSON.toJSONString(principal.getAttributes()));
        if(true){
            return "index";
        }
        return "error";
    }

    @RequestMapping(value = "/code",method = RequestMethod.GET)
    public void code(@RequestParam("code") String code) {
        log.info("code:{}", code);
    }

```

  • 写回答

2条回答 默认 最新

  • Leodong. 2024-01-10 20:27
    关注

    以下回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    这个问题可能是由于OAuth2的重定向URI设置不正确导致的。在Spring Security OAuth2中,重定向URI是用于接收授权服务器返回的授权码的。在你的代码中,你设置了重定向URI为"/code",但是这个URI可能没有被正确地映射到你的回调接口。

    首先,你需要确保你的回调接口被正确地映射到了"/code"这个URI。你可以在你的控制器类中添加一个方法来处理这个请求,例如:

    @RequestMapping(value = "/code", method = RequestMethod.GET)
    public String handleCode(@RequestParam("code") String code) {
        log.info("code:{}", code);
        // 在这里处理授权码,例如使用它来获取访问令牌
        return "redirect:/home";
    }
    

    然后,你需要确保你的HttpSecurity配置中的redirectionEndpoint().baseUri("/code")是正确的。这个配置告诉Spring Security在哪个URI下寻找重定向端点。如果你的回调接口被映射到了其他的URI,你需要修改这个配置以匹配你的实际设置。

    最后,如果问题仍然存在,你可能需要检查你的应用程序的其他部分,例如你的授权服务器的配置,以确保所有的设置都是正确的。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月12日
  • 创建了问题 1月10日

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆