whyczh
2021-06-03 81bdad137f96c25487424f442b6c49ebb4745eee
src/main/java/com/whyc/service/UserService.java
@@ -2,11 +2,18 @@
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;
@@ -15,6 +22,7 @@
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;
@@ -28,25 +36,49 @@
    @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;
    }
@@ -54,41 +86,89 @@
        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;
@@ -103,15 +183,15 @@
        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.getName());
        if(userLoginInfo.getUsername().equals(user.getName()) && userLoginInfo.getTimestamp().compareTo(timestamp)==0){
                //说明没有从其他地方登录
        }else{
        if (userLoginInfo.getUsername().equals(user.getName()) && userLoginInfo.getTimestamp().compareTo(timestamp) == 0) {
            //说明没有从其他地方登录
        } else {
            //说明从其他地方登录了,当前用户的session清除
            flag = true;
            session.invalidate();