今天要写个登录的接口,提供给主平台进行单点登录(作为一个子平台,懒得写登录页了,想通过接口,返回给主平台单点登录后的message,顺便在用户名密码验证成功的时候,跳转一下我的子平台主页),中间遇到点问题,特此记录一下
主要参考了https://www.jb51.net/article/35550.htm 的response.sendRedirect的重定向,
@RequestMapping("/login")
@ResponseBody
public void login(HttpServletRequest request,HttpServletResponse response) throws IOException {
String result = "";
String loginStr = "";
String pwdStr = "";
loginStr = request.getParameter("user");
pwdStr = request.getParameter("pwd");
if (loginStr != null && pwdStr != null) {// 如果用户名和密码不为空
UserDomain userDomains = userDao.selectUsers();
if (null == userDomains) {
result = "无此用户";
} else {
if (!pwdStr.equals(userDomains.getPwd) {
result = "密码错误";
} else {
result = "登录成功";
response.sendRedirect("/main");
//response.setHeader("Location","/main");
}
}
}else {//当未提交用户名或者密码,则设置错误返回对象
result = "未提供用户名和密码进行身份验证";
}
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.print(result);
// out.flush();
}
其中根据参考文档里的解释,response.sendRedirect(),此语句前不允许有out.flush(),如果有,会有异常;如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;(所以不能写out.flush())。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
注:response.setHeader("Location","/main") 这句试了下,并不能跳转,不太清楚为啥,后面有时间了再研究一下。
本文记录了在开发登录接口时遇到的问题,作为子平台,通过接口实现与主平台的单点登录。接口设计允许主平台获取验证消息,并在验证成功后利用response.sendRedirect进行重定向至子平台主页。需要注意的是,该方法前禁止使用out.flush(),且重定向前的代码会执行完毕。由于某些限制,无法使用request.setAttribute传递参数,只能通过URL参数或session。同时,response.setHeader("Location","/main")未能成功触发跳转,原因待后续研究。"
133027930,10220647,YOLOv8与SwinTransformer融合:打造目标检测新标杆,"['计算机视觉', '深度学习', '目标检测', 'YOLO', 'Transformer']
784

被折叠的 条评论
为什么被折叠?



