通过cookie实现实现用户信息共享(免密登录)

ppylox
·6/26/2024·1 阅读
AI 摘要模型根据正文自动生成,仅供参考

后台管理新增AI问答和AI绘画两个二级域名功能,绘画需登录并消耗积分,但现有登录未将token写入cookie,导致跳转后无法免密使用。解决方案是在登录接口中将token写入cookie,设置domain为dsiab.com、path为/,使后续请求自动携带cookie。绘画服务端优先从请求头获取token,为空时遍历cookie取authorizationToken,再解析用户名完成鉴权,实现跨子域免密登录。

最近后台管理新上线了两个功能,一个是ai问答,一个是ai绘画,两个功能分别对应的是两个独立的二级域名,其中ai绘画是需要登录使用并且消耗积分的。

这就产生了一个问题,因为是从后台管理页面跳转过去的,所以正常情况下应该是跳转过去之后应该默认带上当前登录的用户信息,就能直接使用绘画功能的,但是现实情况是不行的。

因为现有的登录功能是没有把用户的token写入到cookie中的,所以最终的免密方案就是通过cookie来实现。

首先,需要在后台管理登录的时候将token写入cookie。

@PostMapping("/login")\r\n  public ResponseMap login(@RequestBody AccountDto accountDto, HttpServletRequest request, HttpServletResponse response) throws Exception {\r\n    String ip = commonUtils.getIpAddr(request);\r\n    UserDto userInfo = accountService.login(accountDto,ip);\r\n    Cookie cookie  = new Cookie("authorizationToken",userInfo.getToken());\r\n    cookie.setDomain("dsiab.com");\r\n    cookie.setPath("/");\r\n    response.addCookie(cookie);\r\n    return ResponseMap.success(userInfo);\r\n  }

这样在登录成功后由于浏览器的特性后续所有的请求就默认带上了cookie。

带上cookie之后就好办了,在绘画的域名服务请求也会带上该cookie,这样只需要从请求的cookie中解析用户信息就能实现登录效果了。

public void updateUserScore (HttpServletRequest request){\r\n        String token = jwtTokenUtil.getToken(request);\r\n        // 如果请求头没有token,就从cookie中取token\r\n        Cookie[] cookies = request.getCookies();\r\n        // 如果请求头没有token,就从cookie中取token\r\n        if (token == null && cookies != null){\r\n            for (Cookie cookie : cookies){\r\n                if (cookie.getName().equals("authorizationToken")){\r\n                    token =  cookie.getValue();\r\n                }\r\n            }\r\n        }\r\n        String username= jwtTokenUtil.getUsernameFromToken(token);\r\n         ...\r\n    };

默认从headers里面获取token,如果为空则从cookie中获取,后面的流程跟现有的请求保持一致即可。

相关文章

评论 (0)

暂无评论,来写第一条吧