You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kakao API请求成功后如何执行Controller设置logStatus会话属性?

问题解决方案

问题分析

  • Kakao登录成功后需要在服务器端设置会话属性logStatus="Y",但原loginOk接口依赖u_id、u_pw参数,Kakao登录流程无法提供这些参数,导致调用时触发MyBatis参数设置异常(5xx错误),Ajax成功回调无法执行。
  • 原接口逻辑依赖UserDTO对象,但Kakao登录无法生成该对象,无需执行原有账号密码验证逻辑。

修改步骤

1. 前端JSP的kakaoLogin函数修改

移除冗余页面跳转,调整Ajax请求至新接口,可选择性传递Kakao返回的用户标识(用于后续关联本地用户):

function kakaoLogin() {
    Kakao.Auth.login({
        success: function (response) {
            Kakao.API.request({ 
                url: '/v2/user/me',
                success: function (kakaoUser) {
                    $.ajax({
                        url: '/kakaoLoginOk', 
                        type: 'POST',
                        data: { kakaoId: kakaoUser.id }, // 可选:传递Kakao用户ID用于后续关联
                        success: function () {
                            window.location.href = '/smhrd';
                        },
                        error: function (error) {
                            console.log('Kakao登录会话设置失败:', error);
                        },
                    });
                },
                fail: function (error) {
                    console.log('Kakao用户信息获取失败:', error);
                },
            });
        },
        fail: function (error) {
            console.log('Kakao授权登录失败:', error);
        },
    });
}

2. 后端Spring Controller新增专属接口

创建专门处理Kakao登录后的会话设置接口,无需u_id、u_pw参数:

@PostMapping("/kakaoLoginOk")
public ResponseEntity<Void> kakaoLoginOk(HttpSession session, @RequestParam(required = false) Long kakaoId) {
    // 直接设置登录状态会话属性
    session.setAttribute("logStatus", "Y");
    
    // 可选:若后续需要关联本地用户,可在此处通过kakaoId查询或创建用户
    // UserDTO dto = service.findOrCreateByKakaoId(kakaoId);
    // if (dto != null) {
    //     session.setAttribute("logId", dto.getU_id());
    //     session.setAttribute("logName", dto.getU_name());
    // }
    
    return ResponseEntity.ok().build();
}

3. 保留原loginOk接口

原loginOk接口无需修改,继续用于传统账号密码登录流程。

错误原因说明

原5xx错误是因为调用loginOk时未传递u_id和u_pw参数,MyBatis执行SQL时无法完成参数映射,触发参数设置异常。新接口跳过了账号密码验证逻辑,直接设置会话状态,彻底解决参数缺失问题。

内容的提问来源于stack exchange,提问作者Uranus_ly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:15:57