文明出行管理系统的登陆的完整原理与实现思路 - 13337159127/Note GitHub Wiki

1.用户在浏览器向服务器发送一个请求地址,服务器接收地址并且根据springmvc配置文件跳转到登录页面。 2.加载登录页面,浏览器向服务器发送一个请求。获取到验证码。 3.在登录页面输入用户名,密码,验证码。点击登录,js进行校验,校验通过,浏览器向服务器发送一个请求。 4.浏览器找到服务器端的方法执行,在方法里面接收user对象。 5. Subject subject = SecurityUtils.getSubject();shiro框架,获取当前用户subject。 6.当前用户调用subject.isAuthenticated()方法判断是否已登录。如果登录,直接进入文明管理系统的首页。 7.在方法中用request.getParameter("");接收页面传递过来的验证码参数。 8.用StringUtils.isBlank()判断验证码是否为空,或者用“非”逻辑。用.equals()方法判断request.getParameter("")接收的验证码和session.getAttribute("")接收到的验证码是否相等。如果任意一个条件成立,用model.addAttribute(" ", " ");向页面传递输入验证码错误。如果不成立。继续执行程序。 9.从user对象中取出用户名,用StringUtils.isBlank()方法判断用户名是否为空,如果为空,用model.addAttribute("", "用户名不能为空!");向页面发送用户名不能为空。直接return。如果不为空,继续执行程序。 10.subject.login(new UsernamePasswordToken(user.getUserName(), MD5Util.md5(user.getPassword())));将用户名和加密的密码封装到一个对象中,调用当前subject.login()方法,这会把UsernamePasswordToken的对象作为参数传递到自己定义的Realm的doGetAuthenticationInfo(AuthenticationToken token)方法中; 11.在方法中根据token对象取出登录的用户名和密码。把用户名和密码放到一个用户实体类的构造函数中。同时作为参数传递给service层的方法。在用户实体类中把构造函数获取到的用户名和密码赋值给用户实体类的用户名和密码。 12.service层的方法接收该参数(用户实体类的对象),把对象作为参数传到dao层。也就是UserMapper接口。用一个用户实体对象(user)接收数据库查询的结果 13.在mybatils配置文件namespace属性写入包名+UserMapper。并且根据mybatis配置文件的SQL id和UserMapper接口中的方法名相对应的SQL语句去执行。查询输入的用户名和密码是否和数据库的匹配。 14.在service层用user对象对查询结果做判断。如果输入用户名和密码和数据库的匹配,则user对象不为空。如果不匹配。user对象为空。返回user 15.在自己定义的Realm的doGetAuthenticationInfo(AuthenticationToken token)方法中判断,如果返回的对象不为空,则继续执行程序。如果返回对象为空,执行 throw new AuthenticationException("用户名或密码错误."); 16.如果验证失败,AuthenticationException异常说明异常原因。执行catch语句块的,用model.addAttribute("loginerror", "用户名或密码错误 !");向页面传递用户名或者密码错误。直接返回。如果验证成功,则继续执行程序。 17.用subject.isAuthenticated()方法判断。如果身份验证成功,直接接入到管理系统首页。如果身份验证失败。直接返回登录页