Google OAuth Sign in with Google登录后如何在Servlet中创建新会话
Sign in with Google 对接 Tomcat 10 Servlet 会话创建方案
首先你提到的前端构造表单提交用户姓名、邮箱到后端Servlet的方案仅可用于本地测试,绝对不能上线:前端提交的明文用户信息可以被任意篡改,攻击者随便构造请求就能伪造任意用户身份登录。
标准安全实现流程
- 前端onSignIn回调中不要自行提取邮箱、姓名信息,直接取谷歌返回的
id_token字符串(JWT格式,由谷歌签名签发,无法伪造) - 前端将
id_token传给后端,两种方式按需选:- 要页面跳转就构造隐藏表单POST提交,把
id_token作为表单字段 - 要无刷新登录就用fetch/axios异步POST请求发送
- 要页面跳转就构造隐藏表单POST提交,把
- 后端Servlet对应POST接口拿到
id_token后,用谷歌官方提供的Java客户端库校验token合法性,校验通过后可以直接拿到谷歌返回的可信用户邮箱、姓名、头像等信息 - 校验通过后调用
request.getSession(true)创建新的HttpSession,将用户信息存入Session属性中,后续接口直接从Session取用户身份即可 - 最后根据前端传参方式返回响应:表单提交就重定向到登录后首页,异步请求就返回JSON格式的登录成功状态
临时测试快速实现方案
如果只是做Demo不考虑安全问题,你原本的方案是可以跑通的:前端构造表单把邮箱、姓名作为字段POST到Servlet,后端用request.getParameter()拿到对应参数,直接创建Session存信息就行,能快速看到效果。
Tomcat 10 适配注意点
Tomcat 10 已将Java EE API迁移到Jakarta EE,所有Servlet相关的导入包要换成jakarta.servlet.*,不要用旧的javax.servlet.*,HttpSession的操作API和之前版本完全一致,无需额外调整。
内容的提问来源于stack exchange,提问作者TTT
相关产品推荐
相关产品推荐

