这两个登录方法的不同点在于参数和实现方式。第一个方法使用普通的表单提交方式,包含用户名、密码和是否记住登录状态的参数,而第二个方法使用了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);
    }
}
若依框架登录方法对比:'/login' 与 '/applogin' 的区别

原文地址: https://www.cveoy.top/t/topic/nyxq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录