登录状态保持,服务端把用户信息保存到session
controler层:传入参数时加入HttpSession
@PostMapping("/login") @ResponseBody public ApiRestResponse login(@RequestParam("userName") String userName, @RequestParam("password") String password, HttpSession session){ //由于参数在请求中加入注解便于识别,加入注解还需指定参数名 // if (username == null)如果对象不是null,字符串内什么都没有会导致误判 if (StringUtils.isEmpty(userName)){ return ApiRestResponse.error(SpringLearnExceptionEnum.NEED_USER_NAME); } if (StringUtils.isEmpty(password)){ return ApiRestResponse.error(SpringLearnExceptionEnum.NEED_PASSWORD); } User user = userService.login(userName, password); //保存用户信息时,不保存密码 user.setPassword(null); //将用户信息保存到session中 session.setAttribute(Constant.Demo_User, user); //setAttribute方法传参key value(key , value) return ApiRestResponse.success(user); }
mapper:
//单参数不加注解,多参数加注解 User selectLogin(@Param("userName") String userName,@Param("password") String password);
xml:
参数类型用map
<select id="selectLogin" parameterType="map" resultMap="BaseResultMap"> -- 参数不止一个,使用map select <include refid="Base_Column_List"/> from imooc_mall_user where username = #{userName,jdbcType=VARCHAR} and password = #{password} </select>
service:
User login(String userName, String password);
由于表内存储的密码是加密过的,调用mapper参数不能直接使用password
@Override public User login(String userName,String password) { String md5Password = null; try { md5Password = MD5Utils.getMD5Str(password); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } User user = userMapper.selectLogin(userName,md5Password); if (user == null) { throw new SpringLearnException(SpringLearnExceptionEnum.WRONG_PASSWORD); } return user; }
更新用户信息:
controller:
session.getAttribut(key)返回对象
/** * 更新个性签名 */ public ApiRestResponse updateUserInfo(HttpSession session, @RequestParam String signature){ //从session中拿到User对象 User currentUser = (User)session.getAttribute(Constant.Demo_User); if (currentUser == null) { return ApiRestResponse.error(SpringLearnExceptionEnum.NEED_LOGIN); } User user = new User(); user.setId(currentUser.getId()); user.setPersonalizedSignature(signature); userService.updateUserInfo(user); return ApiRestResponse.success(); }
service:
void updateUserInfo(User user);
/** * 更新用户个性签名 */ @Override public void updateUserInfo(User user){ int count = userMapper.updateByPrimaryKey(user); if (count > 1) { throw new SpringLearnException(SpringLearnExceptionEnum.UPDATE_FAILED); } }
打开postman进行验证
Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'username' cannot be nul
判断错误是因为除了id,signature都是null故,需要改写系统生成的xml文件
更改后运行成功
同理完成设计管理员登录接口,判断权值即可
完成退出登录接口
session.removeAttribute(Constant.Demo_User);