/** * 强制要求系统必须携带令牌 * * @return */ @AssertDToken public void ssowithtoken(HttpServletRequest request, HttpServletResponse response) { // return "path:sso"; String u = "", p = "", ck = ""; String successRedirect = request.getParameter("successRedirect"); if (!StringUtil.isEmpty(successRedirect)) { successRedirect = StringUtil.getRealPath(request, successRedirect, true); } String userName = (String) request.getAttribute(TokenStore.token_request_account_key); String worknumber = (String) request.getAttribute(TokenStore.token_request_worknumber_key); String loginType = "1"; if (StringUtil.isEmpty(userName)) { userName = worknumber; loginType = "2"; } String loginMenu = request.getParameter("loginMenu"); String contextpath = request.getContextPath(); String menuid = "newGetDoc"; if (loginMenu != null) { menuid = loginMenu; } HttpSession session = request.getSession(); boolean isWebSealServer = ConfigManager.getInstance().getConfigBooleanValue("isWebSealServer", false); if (isWebSealServer && userName == null) { String subsystem = "sany-mms"; try // uim检测 { CommonInfo info = new CommonInfo(); UimUserInfo userinfo = null; String ip = ""; userinfo = info.validateUIM(request); ip = userinfo.getUser_ip(); userName = userinfo.getUser_name(); AccessControl control = AccessControl.getInstance(); control.checkAccess(request, response, false); String user = control.getUserAccount(); request.setAttribute("fromsso", "true"); if (user == null || "".equals(user) || !userName.equals(user)) { try { if (!userName.equals(user)) control.resetSession(session); String password = SSOUserMapping.getUserPassword(userName); control = AccessControl.getInstance(); control.login(request, response, userName, password); if (StringUtil.isEmpty(successRedirect)) { Framework framework = Framework.getInstance(control.getCurrentSystemID()); MenuItem menuitem = framework.getMenuByID(menuid); if (menuitem instanceof Item) { Item menu = (Item) menuitem; successRedirect = MenuHelper.getRealUrl( contextpath, Framework.getWorkspaceContent(menu, control), MenuHelper.sanymenupath_menuid, menu.getId()); } else { Module menu = (Module) menuitem; String framepath = contextpath + "/sanydesktop/singleframe.page?" + MenuHelper.sanymenupath + "=" + menu.getPath(); successRedirect = framepath; } AccessControl.recordIndexPage(request, successRedirect); } else { successRedirect = URLDecoder.decode(successRedirect); } response.sendRedirect(successRedirect); return; } catch (Exception e) { response.sendRedirect( contextpath + "/webseal/websealloginfail.jsp?userName="******"&ip=" + ip + "&errormsg=" + java.net.URLEncoder.encode(e.getMessage(), "UTF-8")); return; } } else { control.resetUserAttributes(); if (StringUtil.isEmpty(successRedirect)) { Framework framework = Framework.getInstance(control.getCurrentSystemID()); MenuItem menuitem = framework.getMenuByID(menuid); if (menuitem instanceof Item) { Item menu = (Item) menuitem; successRedirect = MenuHelper.getRealUrl( contextpath, Framework.getWorkspaceContent(menu, control), MenuHelper.sanymenupath_menuid, menu.getId()); } else { Module menu = (Module) menuitem; String framepath = contextpath + "/sanydesktop/singleframe.page?" + MenuHelper.sanymenupath + "=" + menu.getPath(); successRedirect = framepath; } AccessControl.recordIndexPage(request, successRedirect); } else { successRedirect = URLDecoder.decode(successRedirect); } response.sendRedirect(successRedirect); return; } } catch (Exception e) // 检测失败,继续平台登录 { } } else { try { AccessControl control = AccessControl.getInstance(); control.checkAccess(request, response, false); String user = control.getUserAccount(); worknumber = control.getUserAttribute("userWorknumber"); boolean issameuser = false; if (loginType.equals("2")) { if (worknumber != null && !worknumber.equals("")) issameuser = userName.equals(worknumber); } else { if (user != null && !user.equals("")) issameuser = userName.equals(user); } if (user == null || "".equals(user) || !issameuser) { if (!issameuser) { control.resetSession(session); } try { // 1-域账号登录 2-工号登录 String password = null; if (loginType.equals("1")) { password = SSOUserMapping.getUserPassword(userName); } else { java.util.Map data = SSOUserMapping.getUserNameAndPasswordByWorknumber(userName); userName = (String) data.get("USER_NAME"); password = (String) data.get("USER_PASSWORD"); } control = AccessControl.getInstance(); request.setAttribute("fromsso", "true"); control.login(request, response, userName, password); if (StringUtil.isEmpty(successRedirect)) { Framework framework = Framework.getInstance(control.getCurrentSystemID()); MenuItem menuitem = framework.getMenuByID(menuid); if (menuitem instanceof Item) { Item menu = (Item) menuitem; successRedirect = MenuHelper.getRealUrl( contextpath, Framework.getWorkspaceContent(menu, control), MenuHelper.sanymenupath_menuid, menu.getId()); } else { Module menu = (Module) menuitem; String framepath = contextpath + "/sanydesktop/singleframe.page?" + MenuHelper.sanymenupath + "=" + menu.getPath(); successRedirect = framepath; } AccessControl.recordIndexPage(request, successRedirect); } else { successRedirect = URLDecoder.decode(successRedirect); } response.sendRedirect(successRedirect); return; } catch (Exception e) { response.sendRedirect( contextpath + "/webseal/websealloginfail.jsp?userName="******"&errormsg=" + java.net.URLEncoder.encode(e.getMessage(), "UTF-8")); return; } } else { control.resetUserAttributes(); if (StringUtil.isEmpty(successRedirect)) { Framework framework = Framework.getInstance(control.getCurrentSystemID()); MenuItem menuitem = framework.getMenuByID(menuid); if (menuitem instanceof Item) { Item menu = (Item) menuitem; successRedirect = MenuHelper.getRealUrl( contextpath, Framework.getWorkspaceContent(menu, control), MenuHelper.sanymenupath_menuid, menu.getId()); } else { Module menu = (Module) menuitem; String framepath = contextpath + "/sanydesktop/singleframe.page?" + MenuHelper.sanymenupath + "=" + menu.getPath(); successRedirect = framepath; } AccessControl.recordIndexPage(request, successRedirect); } else { successRedirect = URLDecoder.decode(successRedirect); } response.sendRedirect(successRedirect); return; } } catch (Throwable ex) { String errorMessage = ex.getMessage(); if (errorMessage == null) errorMessage = ""; errorMessage = errorMessage.replaceAll("\\n", "\\\\n"); errorMessage = errorMessage.replaceAll("\\r", "\\\\r"); try { response.getWriter().print(errorMessage + "登陆失败,请确保输入的用户名和口令是否正确!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }