package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.api.R; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.whyc.dto.Response; import com.whyc.dto.UserLoginInfo; import com.whyc.mapper.UserMapper; import com.whyc.pojo.User; import com.whyc.util.DigestsUtil; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.baomidou.mybatisplus.core.toolkit.Wrappers.*; @Service @Slf4j public class UserService { @Resource private UserMapper userMapper; @Resource private UserBridgeService userBridgeService; @Autowired private ApplicationContext applicationContext; public Response add(User user) { try { User userFound = userBridgeService.findPasswordAndSlatByUserName(user.getName()); if (userFound.getId() != 0) { return new Response<>().set(1, false, "用户已存在"); } user.setCreateTime(new Date()); user.setState(0); Map encryptMap = DigestsUtil.encryptPassword(user.getPassword()); user.setPassword(encryptMap.get("password")); user.setSalt(encryptMap.get("salt")); if (userMapper.insert(user) > 0) { return new Response<>().set(1, true); } else { return new Response<>().set(1, false, "添加失败"); } } catch (Exception e) { e.printStackTrace(); return new Response<>().set(0); } } public boolean addBatch(List roles) { return userMapper.insertBatchSomeColumn(roles) == roles.size(); } public User getById(int id) { return userMapper.selectById(id); } public List getAll() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.ne("name","superadmin"); List users = userMapper.selectList(queryWrapper); return users; } public IPage getAllWithPage(Page page) { return userMapper.selectPage(page, null); } public Response> getPageByCondition(int pageNum, int pageSize, User user) { QueryWrapper queryWrapper = new QueryWrapper<>(user); queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "name", user.getSearch()); queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "real_name", user.getSearch()); queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "phone", user.getSearch()); queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "email", user.getSearch()); queryWrapper.ne("name","superadmin"); IPage page = userMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper); return new Response>().set(1, page); } public boolean validatePassword(String userName, String password) { User user = userBridgeService.findPasswordAndSlatByUserName(userName); boolean result = user.getPassword().equals(DigestsUtil.sha1(password, user.getSalt())); return result; } public Response update(User user) { if(StringUtils.isNotEmpty(user.getPassword())){ String password = DigestsUtil.sha1(user.getPassword(),user.getSalt()); user.setPassword(password); } if (userMapper.updateById(user) > 0) { return new Response().setMsg(1, "更新成功"); } else { return new Response().setMsg(0, "更新失败"); } } public Response updateUserFreeze(int id, int state) { User user = userMapper.selectById(id); user.setState(state); if (userMapper.updateById(user) > 0) { if (state == 0) { return new Response().setMsg(1, "启用成功"); } else { return new Response().setMsg(1, "冻结成功"); } } else { return new Response().setMsg(0, "更新失败"); } } public Response delete(int id) { if (userMapper.deleteById(id) > 0) { return new Response().setMsg(1, "删除成功"); } else { return new Response().setMsg(0, "删除失败"); } } public boolean login(String username, String password, HttpServletRequest request) { boolean flag = false; //查询用户名和密码是否正确 QueryWrapper queryWrapper = query(); queryWrapper.eq("name", username).eq("password", password); User user = userMapper.selectOne(queryWrapper); if (user != null) { flag = true; //session中存储用户信息,设置有效期30分钟 HttpSession session = request.getSession(); long timestamp = System.currentTimeMillis(); session.setAttribute("user", user); session.setAttribute("timestamp", timestamp); session.setMaxInactiveInterval(1800); //servletContext中存储用户信息 ServletContext servletContext = request.getServletContext(); Map userMap = (Map) servletContext.getAttribute("users"); if (userMap == null) { log.info("servletContext首次存值"); userMap = new HashMap<>(); userMap.put(username, new UserLoginInfo(username, timestamp)); servletContext.setAttribute("users", userMap); } else { log.info("servletContext已经有值"); userMap.put(username, new UserLoginInfo(username, timestamp)); servletContext.setAttribute("users", userMap); } } return flag; } public boolean loginCheck(HttpServletRequest request) { boolean flag = false; ServletContext servletContext = request.getServletContext(); HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); Long timestamp = (Long) session.getAttribute("timestamp"); if (user == null) { return false; } Map userMap = (Map) servletContext.getAttribute("users"); UserLoginInfo userLoginInfo = userMap.get(user.getName()); if (userLoginInfo.getUsername().equals(user.getName()) && userLoginInfo.getTimestamp().compareTo(timestamp) == 0) { //说明没有从其他地方登录 } else { //说明从其他地方登录了,当前用户的session清除 flag = true; session.invalidate(); } return flag; } }