标签:实现 onclick EDA col pass 联系 open params sed
1.程序登录入口,页面传递地参数userName,password ,loginType3个参数,用 LoginUser 对象接收。loginType 为登录方式,因为我这里有多种登录方式,因此用这个字段来区分。不同的登录方式,采用不同的token封装登录信息。登录的过程就是调用Subject 的login方法,参数为封装登录信息的token。shiro用抛异常的方式来反馈登录结果,不同的异常代表不同的反馈结果。
public ResultBean login(LoginUser loginUser) { String userName = loginUser.getUserName(); String password = loginUser.getPassword(); String loginType = loginUser.getLoginType(); if (StringUtils.isAnyBlank(userName, password, loginType)) { return ResultBean.paramsError(); } Subject subject = SecurityUtils.getSubject(); AuthenticationToken token = null; if (PASSWORD_LOGIN.equals(loginType)) { token = new UsernamePasswordToken(userName, password); } else if (CODE_LOGIN.equals(loginType)) { token = new PhoneCodeToken(userName, password); } else { return ResultBean.failure("不支持的登录方式"); } String errorMsg = ""; try { subject.login(token);return ResultBean.success(user); } catch (UnknownAccountException e) { errorMsg = "无效账户"; } catch (IncorrectCredentialsException e) { errorMsg = "密码错误"; } catch (CodeErrorException e) { errorMsg = "验证码错误/已过期"; } catch (LockedAccountException e) { errorMsg = "用户已冻结"; } catch (AuthenticationException e) { errorMsg = "登录异常,请联系管理员"; logger.error("登录异常,{}", e.getMessage()); } return ResultBean.failure(errorMsg); }
2.重点看subject.login(token)方法。跟踪进去,看到DelegatingSubject类的login()方法。DelegatingSubject为subject接口的实现类。可以看到,在login()方法里面,调用SecurityManager的login()方法。
标签:实现 onclick EDA col pass 联系 open params sed
原文地址:https://www.cnblogs.com/step-and-step/p/13304868.html