若依框架登录方法对比:'/login' 与 '/applogin' 的区别
这两个登录方法的不同点在于参数和实现方式。第一个方法使用普通的表单提交方式,包含用户名、密码和是否记住登录状态的参数,而第二个方法使用了JSON格式的请求体,将用户对象作为参数传递。另外,第二个方法在登录成功后还保存了用户在线信息,并返回了一个包含用户信息和会话ID的JSON对象。
它们的用途也有所不同。第一个方法适用于普通的Web应用程序,用户通过表单提交方式进行登录。第二个方法适用于移动端应用程序,用户通过API接口进行登录,使用JSON格式的请求体进行参数传递,返回JSON格式的响应数据,同时还保存了用户在线信息。
@PostMapping("/login")
@ResponseBody
public AjaxResult ajaxLogin(String username,String password,Boolean rememberMe)
{
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
Subject subject = SecurityUtils.getSubject();
try
{
subject.login(token);
return success();
}
catch (AuthenticationException e)
{
String msg = '用户或密码错误';
if (StringUtils.isNotEmpty(e.getMessage()))
{
msg = e.getMessage();
}
return error(msg);
}
}
@PostMapping("/applogin")
@ResponseBody
public AjaxResult ajaxAppLogin(@RequestBody SysUser user, HttpServletRequest request)
{
System.out.println(request.getParameter('password'));
UsernamePasswordToken token = new UsernamePasswordToken(user.getUserName(), 'admin123', true);
Subject subject = SecurityUtils.getSubject();
try
{
subject.login(token);
HttpSession session = request.getSession();
LoginReturnVo loginReturnVo = new LoginReturnVo();
SysUserOnline sysUserOnline = new SysUserOnline();
sysUserOnline.setSessionId(session.getId());
sysUserOnline.setLoginName(user.getUserName());
sysUserOnline.setStartTimestamp(new Date());
sysUserOnlineService.saveOnline(sysUserOnline);
UserVo userVo = new UserVo();
SysUser sysUser = ShiroUtils.getSysUser();
BeanUtils.copyProperties(sysUser,userVo);
loginReturnVo.setSession(session.getId());
loginReturnVo.setSysUser(userVo);
boolean isMobile = CommonUtils.JudgeIsMobile(request);
return isMobile ? AjaxResult.success(loginReturnVo) : success();
}
catch (AuthenticationException e)
{
String msg = '用户或密码错误';
if (StringUtils.isNotEmpty(e.getMessage()))
{
msg = e.getMessage();
}
return error(msg);
}
}
原文地址: https://www.cveoy.top/t/topic/nyxq 著作权归作者所有。请勿转载和采集!