Commit bd2f4e10 authored by nie'hong's avatar nie'hong

完善工时统计

parent ae809111
......@@ -16,6 +16,7 @@ public enum BASE_RESP_CODE_ENUM {
MEDIA_TYPE_NOT_ACCEPT("406", "无法接受请求中的媒体类型"),
REQUEST_TIME_OUT("408", "无法接受请求中的媒体类型"),
MEDIA_TYPE_NOT_SUPPORTED("415", "不支持的媒体类型"),
PLEASE_RE_LOGIN("444", "未登录或已下线,请重新登录"),
SERVER_ERROR("500", "获取数据异常"),
INPUT_PARAM_IS_NULL("600", "入参为空"),
WORK_ORDER_INFO_IS_NULL("601", "工单信息为空"),
......
......@@ -7,6 +7,7 @@ import cn.wisenergy.model.dto.OrganizationStructureDto;
import cn.wisenergy.model.dto.ResultUser;
import cn.wisenergy.model.vo.GetUserListVo;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
......@@ -26,9 +27,10 @@ public interface WorkUserService {
* @param loginName 登录名
* @param password 密码
* @param source 登录来源
* @param request
* @return
*/
ResultUser login(String loginName, String password, String source);
ResultUser login(String loginName, String password, String source, HttpServletRequest request);
/**
* 获取用户基础信息
......
......@@ -29,6 +29,9 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
/**
......@@ -322,7 +325,7 @@ public class WorkUserServiceImpl implements WorkUserService {
}
@Override
public ResultUser login(String loginName, String password, String source) {
public ResultUser login(String loginName, String password, String source, HttpServletRequest request) {
log.info("WorkUserServiceImpl[]login[].input.param" + loginName + password + source);
if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)) {
throw new BaseCustomException(BASE_RESP_CODE_ENUM.INPUT_PARAM_IS_NULL);
......@@ -348,6 +351,36 @@ public class WorkUserServiceImpl implements WorkUserService {
if (roles.contains(ManagerEnum.NOT_MANAGER.getCode())) {
throw new BaseCustomException(BASE_RESP_CODE_ENUM.THE_USER_NOT_MANAGER_PLASE_MANAGER_LOGIN);
}
// 限制单设备登录
HttpSession session = request.getSession();
ServletContext application = session.getServletContext();
// 获取存储登录
Map<String, String> loginMap = (Map<String, String>) application.getAttribute("loginMap");
Map<String, HttpSession> sessionMap = (Map<String, HttpSession>) application.getAttribute("sessionMap");
String id = String.valueOf(user.getId());
if (loginMap == null) {
loginMap = new HashMap<>();
sessionMap = new HashMap<>();
}
if (loginMap.get(id) == null) {
loginMap.put(id, session.getId());
System.out.println("session.getId() = " + session.getId());
sessionMap.put(session.getId(), session);
System.out.println("session = " + session);
} else {
String sessionId = loginMap.get(id); //根据id获取上一个用户的sessionId
HttpSession oldSession = sessionMap.get(sessionId); //根据sessionId获取上一个用户的session
oldSession.invalidate();
sessionMap.remove(oldSession.getId()); //根据sessionId删除旧session
sessionMap.put(session.getId(), session);
loginMap.remove(id); //移除id和oldSession对应关系
loginMap.put(id, session.getId()); //添加新的id和oldSession对应关系
}
application.setAttribute("loginMap", loginMap); // 添加两个HashMap到Application,重要
application.setAttribute("sessionMap", sessionMap);
}
// 限制审核的天数
WorkSubmitAdopt byId = workSubmitAdoptService.getById(1);
......
......@@ -16,6 +16,8 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* @description:
* @author: nh
......@@ -48,12 +50,12 @@ public class WorkUserController extends BaseController {
@ApiImplicitParam(name = "source", value = "登录来源:PC/WAP", dataType = "string", required = true)
})
@GetMapping(value = "/login")
public Result<ResultUser> login(String loginName, String password, String source) {
public Result<ResultUser> login(String loginName, String password, String source, HttpServletRequest request) {
log.info("WorkUserController[]login[]input.param" + loginName + password + source);
if (StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password) || StringUtils.isEmpty(source)) {
throw new BaseCustomException(BASE_RESP_CODE_ENUM.INPUT_PARAM_IS_NULL);
}
ResultUser resultUser = workUserService.login(loginName, password, source);
ResultUser resultUser = workUserService.login(loginName, password, source, request);
return getResult(resultUser);
}
......
package cn.wisenergy.web.config.hanlder;
import cn.wisenergy.common.utils.exception.BASE_RESP_CODE_ENUM;
import cn.wisenergy.common.utils.exception.BaseCustomException;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* @description:
* @author: nh
* @create: 2021-04-01 10:44
**/
@Component
public class LoginFilter implements Filter {
private final static List<String> URI_LIST = Arrays.asList("/login","/webjars","/swagger-resources","/null","/v2","/swagger-ui.html");
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();
ServletContext application = session.getServletContext();
Map<String, String> loginMap = (Map<String, String>) application.getAttribute("loginMap");
// 请求接口不为登录再过滤
String requestURI = ((HttpServletRequest) request).getRequestURI();
for (String s : URI_LIST) {
if (requestURI.startsWith(s)) {
chain.doFilter(request,response);
return;
}
}
if (loginMap == null) {
throw new BaseCustomException(BASE_RESP_CODE_ENUM.PLEASE_RE_LOGIN);
}
Collection<String> values = loginMap.values();
if (!values.contains(session.getId())) {
throw new BaseCustomException(BASE_RESP_CODE_ENUM.PLEASE_RE_LOGIN);
}
}
@Override
public void destroy() {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment