diff --git a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/LoginController.java b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/LoginController.java index baab5376..1ae7f781 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/LoginController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/LoginController.java @@ -16,10 +16,26 @@ */ package com.chatopera.cc.webim.web.handler; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import com.chatopera.cc.core.UKDataContext; +import com.chatopera.cc.util.Menu; +import com.chatopera.cc.util.UKTools; +import com.chatopera.cc.webim.service.cache.CacheHelper; +import com.chatopera.cc.webim.service.repository.OrganRepository; +import com.chatopera.cc.webim.service.repository.RoleAuthRepository; +import com.chatopera.cc.webim.service.repository.UserRepository; +import com.chatopera.cc.webim.service.repository.UserRoleRepository; +import com.chatopera.cc.webim.util.OnlineUserUtils; +import com.chatopera.cc.webim.web.model.*; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; @@ -29,271 +45,265 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; - -import com.chatopera.cc.core.UKDataContext; -import com.chatopera.cc.util.Menu; -import com.chatopera.cc.webim.service.cache.CacheHelper; -import com.chatopera.cc.webim.service.repository.OrganRepository; -import com.chatopera.cc.webim.service.repository.OrganRoleRepository; -import com.chatopera.cc.webim.service.repository.RoleAuthRepository; -import com.chatopera.cc.webim.service.repository.UserRoleRepository; -import com.chatopera.cc.webim.util.OnlineUserUtils; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.servlet.ModelAndView; - -import com.chatopera.cc.util.UKTools; -import com.chatopera.cc.webim.service.repository.UserRepository; -import com.chatopera.cc.webim.web.model.Organ; -import com.chatopera.cc.webim.web.model.OrganRole; -import com.chatopera.cc.webim.web.model.Role; -import com.chatopera.cc.webim.web.model.RoleAuth; -import com.chatopera.cc.webim.web.model.SystemConfig; -import com.chatopera.cc.webim.web.model.User; -import com.chatopera.cc.webim.web.model.UserRole; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** - * * @author UK * @version 1.0.0 - * */ @Controller -public class LoginController extends Handler{ - - @Autowired - private UserRepository userRepository; - - @Autowired - private OrganRoleRepository organRoleRes ; - - @Autowired - private UserRoleRepository userRoleRes ; - - @Autowired - private RoleAuthRepository roleAuthRes ; - - @Autowired - private OrganRepository organRepository; +public class LoginController extends Handler { + private final static Logger logger = LoggerFactory.getLogger(LoginController.class); - @RequestMapping(value = "/login" , method=RequestMethod.GET) - @Menu(type = "apps" , subtype = "user" , access = true) - public ModelAndView login(HttpServletRequest request, HttpServletResponse response , @RequestHeader(value = "referer", required = false) String referer , @Valid String msg) throws NoSuchAlgorithmException { - ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); - if(request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) ==null){ - view = request(super.createRequestPageTempletResponse("/login")); - if(!StringUtils.isBlank(request.getParameter("referer"))){ - referer = request.getParameter("referer") ; - } - if(!StringUtils.isBlank(referer)){ - view.addObject("referer", referer) ; - } - Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组 - if(cookies!=null) { - for(Cookie cookie : cookies){ - if(cookie!=null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())){ - if(cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)){ - String flagid = UKTools.decryption(cookie.getValue()); - if(!StringUtils.isBlank(flagid)) { - User user = userRepository.findById(flagid) ; - if(user!=null) { - view = this.processLogin(request, response, view, user, referer) ; - } - } - } - } - } - } - } - if(!StringUtils.isBlank(msg)){ - view.addObject("msg", msg) ; - } - SystemConfig systemConfig = UKTools.getSystemConfig(); - if(systemConfig!=null&&systemConfig.isEnableregorgi()) { - view.addObject("show", true); - } - if(systemConfig != null){ - view.addObject("systemConfig", systemConfig) ; - } + @Autowired + private UserRepository userRepository; + + @Autowired + private UserRoleRepository userRoleRes; + + @Autowired + private RoleAuthRepository roleAuthRes; + + @Autowired + private OrganRepository organRepository; + + /** + * 获取一个用户所拥有的所有部门ID + * + * @param user + */ + private void organs(final User user, final String organ) { + if (organ == null) + return; + user.getMyorgans().add(organ); + List y = organRepository.findByOrgiAndParent(user.getOrgi(), organ); + for (Organ x : y) { + organs(user, x.getId()); + } + } + + @RequestMapping(value = "/login", method = RequestMethod.GET) + @Menu(type = "apps", subtype = "user", access = true) + public ModelAndView login(HttpServletRequest request, HttpServletResponse response, @RequestHeader(value = "referer", required = false) String referer, @Valid String msg) throws NoSuchAlgorithmException { + ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); + if (request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) == null) { + view = request(super.createRequestPageTempletResponse("/login")); + if (!StringUtils.isBlank(request.getParameter("referer"))) { + referer = request.getParameter("referer"); + } + if (!StringUtils.isBlank(referer)) { + view.addObject("referer", referer); + } + Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组 + if (cookies != null) { + for (Cookie cookie : cookies) { + if (cookie != null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())) { + if (cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)) { + String flagid = UKTools.decryption(cookie.getValue()); + if (!StringUtils.isBlank(flagid)) { + User user = userRepository.findById(flagid); + if (user != null) { + view = this.processLogin(request, response, view, user, referer); + } + } + } + } + } + } + } + if (!StringUtils.isBlank(msg)) { + view.addObject("msg", msg); + } + SystemConfig systemConfig = UKTools.getSystemConfig(); + if (systemConfig != null && systemConfig.isEnableregorgi()) { + view.addObject("show", true); + } + if (systemConfig != null) { + view.addObject("systemConfig", systemConfig); + } return view; } - - @RequestMapping(value = "/login" , method=RequestMethod.POST) - @Menu(type = "apps" , subtype = "user" , access = true) - public ModelAndView login(HttpServletRequest request, HttpServletResponse response , @Valid User user ,@Valid String referer,@Valid String sla) throws NoSuchAlgorithmException { - ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); - if(request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) ==null){ - if(user!=null && user.getUsername()!=null){ - final User loginUser = userRepository.findByUsernameAndPasswordAndDatastatus(user.getUsername() , UKTools.md5(user.getPassword()),false) ; - if(loginUser!=null && !StringUtils.isBlank(loginUser.getId())){ - view = this.processLogin(request, response, view, loginUser, referer) ; - if(!StringUtils.isBlank(sla) && sla.equals("1")) { - Cookie flagid = new Cookie(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG,UKTools.encryption(loginUser.getId())); - flagid.setMaxAge(7*24*60*60); - response.addCookie(flagid); - // add authorization code for rest api + + @RequestMapping(value = "/login", method = RequestMethod.POST) + @Menu(type = "apps", subtype = "user", access = true) + public ModelAndView login(HttpServletRequest request, HttpServletResponse response, @Valid User user, @Valid String referer, @Valid String sla) throws NoSuchAlgorithmException { + ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); + if (request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) == null) { + if (user != null && user.getUsername() != null) { + final User loginUser = userRepository.findByUsernameAndPasswordAndDatastatus(user.getUsername(), UKTools.md5(user.getPassword()), false); + if (loginUser != null && !StringUtils.isBlank(loginUser.getId())) { + view = this.processLogin(request, response, view, loginUser, referer); + if (!StringUtils.isBlank(sla) && sla.equals("1")) { + Cookie flagid = new Cookie(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG, UKTools.encryption(loginUser.getId())); + flagid.setMaxAge(7 * 24 * 60 * 60); + response.addCookie(flagid); + // add authorization code for rest api String auth = UKTools.getUUID(); CacheHelper.getApiUserCacheBean().put(auth, loginUser, UKDataContext.SYSTEM_ORGI); - response.addCookie((new Cookie("authorization", auth))); - } - }else{ - view = request(super.createRequestPageTempletResponse("/login")); - if(!StringUtils.isBlank(referer)){ - view.addObject("referer", referer) ; - } - view.addObject("msg", "0") ; - } - } - } - SystemConfig systemConfig = UKTools.getSystemConfig(); - if(systemConfig!=null&&systemConfig.isEnableregorgi()) { - view.addObject("show", true); - } - if(systemConfig != null){ - view.addObject("systemConfig", systemConfig) ; - } - return view; - } - - private ModelAndView processLogin(HttpServletRequest request, HttpServletResponse response , ModelAndView view ,final User loginUser , String referer) { - if(loginUser!=null) { - loginUser.setLogin(true); - if(!StringUtils.isBlank(referer)){ - view = request(super.createRequestPageTempletResponse("redirect:"+referer)); - }else { - view = request(super.createRequestPageTempletResponse("redirect:/")); - } - //登录成功 判断是否进入多租户页面 - SystemConfig systemConfig = UKTools.getSystemConfig(); - if(systemConfig!=null&&systemConfig.isEnabletneant() && systemConfig.isTenantconsole() &&!loginUser.isSuperuser()) { - view = request(super.createRequestPageTempletResponse("redirect:/apps/tenant/index")); - } - List userRoleList = userRoleRes.findByOrgiAndUser(loginUser.getOrgi(), loginUser); - if(userRoleList!=null && userRoleList.size()>0){ - for(UserRole userRole : userRoleList){ - loginUser.getRoleList().add(userRole.getRole()) ; - } - } - - //获取用户的角色权限,进行授权 - List roleAuthList = roleAuthRes.findAll(new Specification(){ - @Override - public Predicate toPredicate(Root root, CriteriaQuery query, - CriteriaBuilder cb) { - List list = new ArrayList(); - if(loginUser.getRoleList()!=null && loginUser.getRoleList().size() > 0){ - for(Role role : loginUser.getRoleList()){ - list.add(cb.equal(root.get("roleid").as(String.class), role.getId())) ; - } - } - Predicate[] p = new Predicate[list.size()]; - cb.and(cb.equal(root.get("orgi").as(String.class), loginUser.getOrgi())) ; - return cb.or(list.toArray(p)); - }}) ; - if(roleAuthList!=null) { - for(RoleAuth roleAuth:roleAuthList) { - loginUser.getRoleAuthMap().put(roleAuth.getDicvalue(), true); - } - } - - loginUser.setLastlogintime(new Date()); - if(!StringUtils.isBlank(loginUser.getId())){ - userRepository.save(loginUser) ; - } - super.setUser(request, loginUser); - //当前用户 企业id为空 调到创建企业页面 - if(StringUtils.isBlank(loginUser.getOrgid())) { - view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html")); - } - } - return view ; - } - - @RequestMapping("/logout") - public String logout(HttpServletRequest request , HttpServletResponse response){ - request.getSession().removeAttribute(UKDataContext.USER_SESSION_NAME) ; - Cookie[] cookies = request.getCookies(); - if(cookies!=null) { - for(Cookie cookie : cookies){ - if(cookie!=null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())){ - if(cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)){ - cookie.setMaxAge(0); - response.addCookie(cookie); - } - } - } - } - return "redirect:/"; - } - - @RequestMapping(value = "/register" ) - @Menu(type = "apps" , subtype = "user" , access = true) - public ModelAndView register(HttpServletRequest request, HttpServletResponse response,@Valid String msg) { - ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); - if(request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) ==null){ - view = request(super.createRequestPageTempletResponse("/register")); - } - if(!StringUtils.isBlank(msg)){ - view.addObject("msg", msg) ; - } + response.addCookie((new Cookie("authorization", auth))); + } + } else { + view = request(super.createRequestPageTempletResponse("/login")); + if (!StringUtils.isBlank(referer)) { + view.addObject("referer", referer); + } + view.addObject("msg", "0"); + } + } + } + SystemConfig systemConfig = UKTools.getSystemConfig(); + if (systemConfig != null && systemConfig.isEnableregorgi()) { + view.addObject("show", true); + } + if (systemConfig != null) { + view.addObject("systemConfig", systemConfig); + } return view; } - + + private ModelAndView processLogin(HttpServletRequest request, HttpServletResponse response, ModelAndView view, final User loginUser, String referer) { + if (loginUser != null) { + loginUser.setLogin(true); + if (!StringUtils.isBlank(referer)) { + view = request(super.createRequestPageTempletResponse("redirect:" + referer)); + } else { + view = request(super.createRequestPageTempletResponse("redirect:/")); + } + //登录成功 判断是否进入多租户页面 + SystemConfig systemConfig = UKTools.getSystemConfig(); + if (systemConfig != null && systemConfig.isEnabletneant() && systemConfig.isTenantconsole() && !loginUser.isSuperuser()) { + view = request(super.createRequestPageTempletResponse("redirect:/apps/tenant/index")); + } + List userRoleList = userRoleRes.findByOrgiAndUser(loginUser.getOrgi(), loginUser); + if (userRoleList != null && userRoleList.size() > 0) { + for (UserRole userRole : userRoleList) { + loginUser.getRoleList().add(userRole.getRole()); + } + } + + // 获取用户部门以及下级部门 + organs(loginUser, loginUser.getOrgan()); // 添加部门到myorgans中 + + // 获取用户的角色权限,进行授权 + List roleAuthList = roleAuthRes.findAll(new Specification() { + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, + CriteriaBuilder cb) { + List list = new ArrayList(); + if (loginUser.getRoleList() != null && loginUser.getRoleList().size() > 0) { + for (Role role : loginUser.getRoleList()) { + list.add(cb.equal(root.get("roleid").as(String.class), role.getId())); + } + } + Predicate[] p = new Predicate[list.size()]; + cb.and(cb.equal(root.get("orgi").as(String.class), loginUser.getOrgi())); + return cb.or(list.toArray(p)); + } + }); + + if (roleAuthList != null) { + for (RoleAuth roleAuth : roleAuthList) { + loginUser.getRoleAuthMap().put(roleAuth.getDicvalue(), true); + } + } + + loginUser.setLastlogintime(new Date()); + if (!StringUtils.isBlank(loginUser.getId())) { + userRepository.save(loginUser); + } + + super.setUser(request, loginUser); + //当前用户 企业id为空 调到创建企业页面 + if (StringUtils.isBlank(loginUser.getOrgid())) { + view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html")); + } + } + return view; + } + + @RequestMapping("/logout") + public String logout(HttpServletRequest request, HttpServletResponse response) { + request.getSession().removeAttribute(UKDataContext.USER_SESSION_NAME); + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if (cookie != null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())) { + if (cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)) { + cookie.setMaxAge(0); + response.addCookie(cookie); + } + } + } + } + return "redirect:/"; + } + + @RequestMapping(value = "/register") + @Menu(type = "apps", subtype = "user", access = true) + public ModelAndView register(HttpServletRequest request, HttpServletResponse response, @Valid String msg) { + ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); + if (request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) == null) { + view = request(super.createRequestPageTempletResponse("/register")); + } + if (!StringUtils.isBlank(msg)) { + view.addObject("msg", msg); + } + return view; + } + @RequestMapping("/addAdmin") - @Menu(type = "apps" , subtype = "user",access=true) - public ModelAndView addAdmin(HttpServletRequest request ,HttpServletResponse response,@Valid User user) { - String msg = "" ; - msg = validUser(user); - if(!StringUtils.isBlank(msg)){ - return request(super.createRequestPageTempletResponse("redirect:/register.html?msg="+msg)); - }else{ - user.setUname(user.getUsername()); - user.setUsertype("0"); - if(!StringUtils.isBlank(user.getPassword())){ - user.setPassword(UKTools.md5(user.getPassword())); - } - user.setOrgi(super.getOrgiByTenantshare(request)); + @Menu(type = "apps", subtype = "user", access = true) + public ModelAndView addAdmin(HttpServletRequest request, HttpServletResponse response, @Valid User user) { + String msg = ""; + msg = validUser(user); + if (!StringUtils.isBlank(msg)) { + return request(super.createRequestPageTempletResponse("redirect:/register.html?msg=" + msg)); + } else { + user.setUname(user.getUsername()); + user.setUsertype("0"); + if (!StringUtils.isBlank(user.getPassword())) { + user.setPassword(UKTools.md5(user.getPassword())); + } + user.setOrgi(super.getOrgiByTenantshare(request)); /*if(!StringUtils.isBlank(super.getUser(request).getOrgid())) { user.setOrgid(super.getUser(request).getOrgid()); }else { user.setOrgid(UKDataContext.SYSTEM_ORGI); }*/ - userRepository.save(user) ; - OnlineUserUtils.clean(super.getOrgi(request)); - - } - ModelAndView view = this.processLogin(request, response, request(super.createRequestPageTempletResponse("redirect:/")), user, ""); - //当前用户 企业id为空 调到创建企业页面 - if(StringUtils.isBlank(user.getOrgid())) { - view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html")); - } - return view; + userRepository.save(user); + OnlineUserUtils.clean(super.getOrgi(request)); + + } + ModelAndView view = this.processLogin(request, response, request(super.createRequestPageTempletResponse("redirect:/")), user, ""); + //当前用户 企业id为空 调到创建企业页面 + if (StringUtils.isBlank(user.getOrgid())) { + view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html")); + } + return view; } - + private String validUser(User user) { - String msg = ""; - User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(),false) ; - if(tempUser!=null) { - msg = "username_exist"; - return msg; - } - tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(),false) ; - if(tempUser!=null) { - msg = "email_exist"; - return msg; - } - tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(),false) ; - if(tempUser!=null) { - msg = "mobile_exist"; - return msg; - } - return msg; + String msg = ""; + User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(), false); + if (tempUser != null) { + msg = "username_exist"; + return msg; + } + tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(), false); + if (tempUser != null) { + msg = "email_exist"; + return msg; + } + tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(), false); + if (tempUser != null) { + msg = "mobile_exist"; + return msg; + } + return msg; } - - + + } \ No newline at end of file diff --git a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/apps/AppsController.java b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/apps/AppsController.java index 1deea5fd..0097d359 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/apps/AppsController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/apps/AppsController.java @@ -217,6 +217,7 @@ public class AppsController extends Handler { User sessionUser = super.getUser(request) ; tempUser.setRoleList(sessionUser.getRoleList()) ; tempUser.setRoleAuthMap(sessionUser.getRoleAuthMap()); + tempUser.setMyorgans(sessionUser.getMyorgans()); User u = tempUser; u.setOrgi(super.getOrgi(request)); super.setUser(request, u); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/model/User.java b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/model/User.java index 7725eff7..8199f1f8 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/model/User.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/model/User.java @@ -17,11 +17,7 @@ package com.chatopera.cc.webim.web.model; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import javax.persistence.Column; import javax.persistence.Entity; @@ -104,6 +100,7 @@ public class User implements java.io.Serializable{ private int fans; //粉丝 private int follows; //关注 private int integral; //积分 + private HashSet myorgans = new HashSet<>(); private List roleList = new ArrayList(); private Map roleAuthMap = new HashMap(); @@ -517,4 +514,13 @@ public class User implements java.io.Serializable{ public void setOrdertype(String ordertype) { this.ordertype = ordertype; } + + @Transient + public HashSet getMyorgans() { + return myorgans; + } + + public void setMyorgans(HashSet myorgans) { + this.myorgans = myorgans; + } }