package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
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.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());
|
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 User getById(int id) {
|
return userMapper.selectById(id);
|
}
|
|
public List<User> getAll() {
|
List<User> users = userMapper.selectList(null);
|
return users;
|
}
|
|
public IPage<User> getAllWithPage(Page page) {
|
return userMapper.selectPage(page, null);
|
}
|
|
public boolean update(User user) {
|
return userMapper.updateById(user)>0;
|
}
|
|
public boolean delete(int id) {
|
return userMapper.deleteById(id)>0;
|
}
|
|
public boolean login(String username, String password , HttpServletRequest request) {
|
boolean flag=false;
|
//查询用户名和密码是否正确
|
QueryWrapper<User> 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<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{
|
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<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{
|
//说明从其他地方登录了,当前用户的session清除
|
flag = true;
|
session.invalidate();
|
}
|
return flag;
|
}
|
}
|