| | |
| | | |
| | | 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.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; |
| | |
| | | @Resource |
| | | private UserMapper userMapper; |
| | | |
| | | @Resource |
| | | private UserBridgeService userBridgeService; |
| | | |
| | | |
| | | @Autowired |
| | | private ApplicationContext applicationContext; |
| | | |
| | | public boolean add(User user) { |
| | | return userMapper.insert(user)>0; |
| | | 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<String, String> 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<User> users) { |
| | | return userMapper.insertBatchSomeColumn(users)==users.size(); |
| | | public boolean addBatch(List<User> roles) { |
| | | return userMapper.insertBatchSomeColumn(roles) == roles.size(); |
| | | } |
| | | |
| | | |
| | | public User getById(int id) { |
| | | return userMapper.selectById(id); |
| | | } |
| | | |
| | | |
| | | |
| | | public List<User> getAll() { |
| | | List<User> users = userMapper.selectList(null); |
| | | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.ne("name","superuser"); |
| | | List<User> users = userMapper.selectList(queryWrapper); |
| | | return users; |
| | | } |
| | | |
| | |
| | | return userMapper.selectPage(page, null); |
| | | } |
| | | |
| | | public boolean update(User user) { |
| | | return userMapper.updateById(user)>0; |
| | | public Response<IPage<User>> getPageByCondition(int pageNum, int pageSize, User user) { |
| | | QueryWrapper<User> 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","superuser"); |
| | | IPage<User> page = userMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper); |
| | | return new Response<IPage<User>>().set(1, page); |
| | | } |
| | | |
| | | public boolean delete(int id) { |
| | | return userMapper.deleteById(id)>0; |
| | | |
| | | 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 boolean login(String username, String password , HttpServletRequest request) { |
| | | boolean flag=false; |
| | | public Response update(User user) { |
| | | 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); |
| | | if ("superuser".equals(user.getName())){ |
| | | return new Response().setMsg(0, "更新失败"); |
| | | } |
| | | 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) { |
| | | User user = userMapper.selectById(id); |
| | | if ("superuser".equals(user.getName())){ |
| | | return new Response().setMsg(0, "删除失败"); |
| | | } |
| | | 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<User> queryWrapper = query(); |
| | | queryWrapper.eq("username",username).eq("password",password); |
| | | queryWrapper.eq("name", username).eq("password", password); |
| | | User user = userMapper.selectOne(queryWrapper); |
| | | if (user!=null){ |
| | | flag=true; |
| | | if (user != null) { |
| | | flag = true; |
| | | //session中存储用户信息,设置有效期30分钟 |
| | | HttpSession session = request.getSession(); |
| | | long timestamp = System.currentTimeMillis(); |
| | | session.setAttribute("user",user); |
| | | session.setAttribute("timestamp",timestamp); |
| | | session.setAttribute("user", user); |
| | | session.setAttribute("timestamp", timestamp); |
| | | session.setMaxInactiveInterval(1800); |
| | | |
| | | //servletContext中存储用户信息 |
| | | ServletContext servletContext = request.getServletContext(); |
| | | Map<String,UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users"); |
| | | if(userMap==null){ |
| | | Map<String, UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users"); |
| | | if (userMap == null) { |
| | | log.info("servletContext首次存值"); |
| | | userMap = new HashMap<>(); |
| | | userMap.put(username,new UserLoginInfo(username,timestamp)); |
| | | servletContext.setAttribute("users",userMap); |
| | | }else{ |
| | | 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); |
| | | userMap.put(username, new UserLoginInfo(username, timestamp)); |
| | | servletContext.setAttribute("users", userMap); |
| | | } |
| | | } |
| | | return flag; |
| | |
| | | User user = (User) session.getAttribute("user"); |
| | | Long timestamp = (Long) session.getAttribute("timestamp"); |
| | | |
| | | if(user==null){ |
| | | if (user == null) { |
| | | return false; |
| | | } |
| | | Map<String,UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users"); |
| | | Map<String, UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users"); |
| | | |
| | | UserLoginInfo userLoginInfo = userMap.get(user.getUsername()); |
| | | if(userLoginInfo.getUsername().equals(user.getUsername()) && userLoginInfo.getTimestamp().compareTo(timestamp)==0){ |
| | | //说明没有从其他地方登录 |
| | | }else{ |
| | | UserLoginInfo userLoginInfo = userMap.get(user.getName()); |
| | | if (userLoginInfo.getUsername().equals(user.getName()) && userLoginInfo.getTimestamp().compareTo(timestamp) == 0) { |
| | | //说明没有从其他地方登录 |
| | | } else { |
| | | //说明从其他地方登录了,当前用户的session清除 |
| | | flag = true; |
| | | session.invalidate(); |