AdminLoginHandler.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package com.iamberry.wechat.handles.admin;
  2. import java.util.List;
  3. import javax.servlet.http.Cookie;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import javax.servlet.http.HttpSession;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.servlet.ModelAndView;
  11. import com.iamberry.app.tool.des.MD5;
  12. import com.iamberry.wechat.core.entity.AdminUtils;
  13. import com.iamberry.wechat.core.entity.admin.AdminChildInfo;
  14. import com.iamberry.wechat.core.entity.admin.AdminChildPermissionErmissions;
  15. import com.iamberry.wechat.core.entity.admin.AdminChildPermissions;
  16. import com.iamberry.wechat.core.entity.admin.AdminInfo;
  17. import com.iamberry.wechat.core.entity.admin.AdminLoginDTO;
  18. import com.iamberry.wechat.face.admin.AdminLoginService;
  19. /**
  20. * description : 后台登陆handler类
  21. * @author 何秀刚
  22. * create date : 2015年12月10日
  23. */
  24. @Controller
  25. public class AdminLoginHandler {
  26. @Autowired
  27. private AdminLoginService adminLoginService;
  28. public void setAdminLoginService(AdminLoginService adminLoginService) {
  29. this.adminLoginService = adminLoginService;
  30. }
  31. private MD5 md5;
  32. public AdminLoginHandler() throws Exception {
  33. md5 = new MD5("inlongadMD5");
  34. }
  35. @Autowired
  36. private AdminUtils adminUtils;
  37. public void setAdminUtils(AdminUtils adminUtils) {
  38. this.adminUtils = adminUtils;
  39. }
  40. /**
  41. * 用户申请后台登陆
  42. * @param request
  43. * @param response
  44. * @return
  45. * @throws Exception
  46. */
  47. @SuppressWarnings({ "unchecked", "static-access" })
  48. @RequestMapping("/loginUI")
  49. public ModelAndView loginUI(HttpServletRequest request,
  50. HttpServletResponse response) throws Exception {
  51. ModelAndView mv = new ModelAndView("admin/main/login");
  52. // 校验用户是否登陆成功
  53. if (adminUtils.getLoginAdminUser(request.getSession()) != null) {
  54. mv.setViewName("admin/main/index"); // 转向home页
  55. return mv;
  56. }
  57. // 检测用户是否保存账户信息
  58. AdminLoginDTO dto = adminUtils.parseCookieAdminUser(request, md5);
  59. if (dto == null) {
  60. adminUtils.createRandom(request.getSession());
  61. return mv;
  62. }
  63. // 登陆判断
  64. Object object = adminLoginService.selectAdminInfoByNameAndPwd(dto);
  65. if (object == null) {
  66. adminUtils.createRandom(request.getSession());
  67. return mv;
  68. }
  69. if (object instanceof AdminInfo) {
  70. AdminInfo adminInfo = (AdminInfo) object;
  71. if (adminInfo == null || adminInfo.getAdminId() == null) {
  72. adminUtils.createRandom(request.getSession());
  73. return mv;
  74. }
  75. // 判断用户状态
  76. if (adminInfo.getAdminStatus().intValue() != 1) {
  77. mv.addObject("title", "对不起,您的账户被封,请联系管理员!");
  78. mv.addObject("text", "对不起,您的账户被封,请联系管理员~");
  79. mv.setViewName("admin/msg/error");
  80. return mv;
  81. }
  82. } else if (object instanceof AdminChildInfo) {
  83. AdminChildInfo adminInfo = (AdminChildInfo) object;
  84. if (adminInfo == null || adminInfo.getAdminId() == null) {
  85. adminUtils.createRandom(request.getSession());
  86. return mv;
  87. }
  88. // 判断用户状态
  89. if (adminInfo.getAdminStatus().intValue() != 1) {
  90. mv.addObject("title", "对不起,您的账户被封,请联系管理员!");
  91. mv.addObject("text", "对不起,您的账户被封,请联系管理员~");
  92. mv.setViewName("admin/msg/error");
  93. return mv;
  94. }
  95. // 注册二级管理员的权限
  96. request.getSession().setAttribute("permission", adminLoginService.selectAdminChildHavePermissionById(adminInfo.getAdminId()));
  97. }
  98. // 登陆成功
  99. //adminUtils.setCookieToResponse(response, dto.getAdminLoginName(), dto.getAdminLoginPwd()); // 更新cookie内容
  100. mv.setViewName("admin/main/index"); // 转向home页
  101. AdminUtils.addAdminUserToSession(object, request);
  102. // 判断是否需要注册菜单信息
  103. List<AdminChildPermissions> sessionMenuInfos = (List<AdminChildPermissions>) request.getSession().getAttribute("menuInfos");
  104. if (sessionMenuInfos == null) {
  105. // 重新注册
  106. if (object instanceof AdminInfo) {
  107. AdminInfo adminInfo = (AdminInfo) object;
  108. request.getSession().setAttribute("menuInfos", adminLoginService.selectMenusById(adminInfo.getAdminId(), true));
  109. } else if (object instanceof AdminChildInfo) {
  110. AdminChildInfo adminInfo = (AdminChildInfo) object;
  111. request.getSession().setAttribute("menuInfos", adminLoginService.selectMenusById(adminInfo.getAdminId(), false));
  112. }
  113. }
  114. // 判断是否注册
  115. return mv;
  116. }
  117. @SuppressWarnings({ "static-access", "unchecked"})
  118. @RequestMapping("/login")
  119. public ModelAndView login(AdminLoginDTO dto,
  120. HttpServletRequest request,
  121. HttpServletResponse response) throws Exception {
  122. ModelAndView mv = new ModelAndView();
  123. // 校验用户是否登陆成功
  124. if (adminUtils.getLoginAdminUser(request.getSession()) != null) {
  125. mv.setViewName("admin/main/index"); // 转向home页
  126. return mv;
  127. }
  128. // 回显
  129. mv.addObject("loginName", dto.getAdminLoginName());
  130. mv.addObject("loginPwd", dto.getAdminLoginPwd());
  131. // 校验token
  132. if (!adminUtils.checkLoginToken(dto.getLoginToken(), request.getSession())) {
  133. mv.setViewName("admin/main/login");
  134. mv.addObject("isShowDiv", true);
  135. mv.addObject("divText", "异常操作,请重试!");
  136. adminUtils.createRandom(request.getSession());
  137. return mv;
  138. }
  139. // 验证码
  140. if (!adminUtils.checkVerifyCode(request.getSession(), dto.getVerifyCode())) {
  141. mv.setViewName("admin/main/login");
  142. mv.addObject("isShowDiv", true);
  143. mv.addObject("divText", "验证码错误,请重试!");
  144. adminUtils.createRandom(request.getSession());
  145. return mv;
  146. }
  147. // 登陆判断
  148. Object object = adminLoginService.selectAdminInfoByNameAndPwd(dto);
  149. if (object == null) {
  150. mv.setViewName("admin/main/login");
  151. mv.addObject("isShowDiv", true);
  152. mv.addObject("divText", "账号密码错误,请重试!");
  153. adminUtils.createRandom(request.getSession());
  154. return mv;
  155. }
  156. if (object instanceof AdminInfo) {
  157. AdminInfo adminInfo = (AdminInfo) object;
  158. if (adminInfo == null || adminInfo.getAdminId() == null) {
  159. adminUtils.createRandom(request.getSession());
  160. return mv;
  161. }
  162. // 判断用户状态
  163. if (adminInfo.getAdminStatus().intValue() != 1) {
  164. mv.addObject("title", "对不起,您的账户被封,请联系管理员!");
  165. mv.addObject("text", "对不起,您的账户被封,请联系管理员~");
  166. mv.setViewName("admin/msg/error");
  167. return mv;
  168. }
  169. } else if (object instanceof AdminChildInfo) {
  170. AdminChildInfo adminInfo = (AdminChildInfo) object;
  171. if (adminInfo == null || adminInfo.getAdminId() == null) {
  172. adminUtils.createRandom(request.getSession());
  173. return mv;
  174. }
  175. // 判断用户状态
  176. if (adminInfo.getAdminStatus().intValue() != 1) {
  177. mv.addObject("title", "对不起,您的账户被封,请联系管理员!");
  178. mv.addObject("text", "对不起,您的账户被封,请联系管理员~");
  179. mv.setViewName("admin/msg/error");
  180. return mv;
  181. }
  182. List<AdminChildPermissionErmissions> list=adminLoginService.selectAdminChildHavePermissionById(adminInfo.getAdminId());
  183. request.getSession().setAttribute("permission", list);
  184. }
  185. // 登陆成功
  186. AdminUtils.addAdminUserToSession(object, request);
  187. if(dto.getOnline() != null && dto.getOnline().equals("true")) {
  188. adminUtils.setCookieToResponse(response, dto.getAdminLoginName(), dto.getAdminLoginPwd());
  189. }
  190. mv.setViewName("admin/main/index"); // 转向home页
  191. // 判断是否需要注册菜单信息
  192. List<AdminChildPermissions> sessionMenuInfos = (List<AdminChildPermissions>) request.getSession().getAttribute("menuInfos");
  193. if (sessionMenuInfos == null) {
  194. // 重新注册
  195. if (object instanceof AdminInfo) {
  196. AdminInfo adminInfo = (AdminInfo) object;
  197. request.getSession().setAttribute("menuInfos", adminLoginService.selectMenusById(adminInfo.getAdminId(), true));
  198. } else if (object instanceof AdminChildInfo) {
  199. AdminChildInfo adminInfo = (AdminChildInfo) object;
  200. List<AdminChildPermissionErmissions> list=adminLoginService.selectAdminChildHavePermissionById(adminInfo.getAdminId());
  201. request.getSession().setAttribute("permission", list);
  202. request.getSession().setAttribute("menuInfos", adminLoginService.selectMenusById(adminInfo.getAdminId(), false));
  203. }
  204. }
  205. return mv;
  206. }
  207. /**
  208. * 当前用户,执行退出登陆
  209. * @return
  210. */
  211. @SuppressWarnings("static-access")
  212. @RequestMapping("/exitLogin")
  213. public ModelAndView exitLogin(
  214. HttpServletRequest request,
  215. HttpServletResponse response
  216. ) {
  217. // 初始化
  218. ModelAndView mv = new ModelAndView("admin/main/login");
  219. if (adminUtils.getLoginAdminUser(request.getSession()) != null) {
  220. // 清空session
  221. request.getSession().invalidate();
  222. // 清空cookie
  223. Cookie [] cookies = request.getCookies();
  224. for(Cookie cookie : cookies){
  225. cookie.setMaxAge(0);
  226. cookie.setPath("/");
  227. response.addCookie(cookie);
  228. }
  229. }
  230. HttpSession session = request.getSession(true);
  231. adminUtils.createRandom(session);
  232. return mv;
  233. }
  234. }