同步操作将从 Rainy/DocSys 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package com.DocSystem.controller;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import java.net.URLEncoder;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.context.ContextLoader;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.multipart.MultipartFile;import util.RegularUtil;import util.ReturnAjax;import util.Encrypt.MD5;import util.WebUploader.MultipartFileParam;import com.DocSystem.entity.User;import com.DocSystem.service.impl.UserServiceImpl;import com.DocSystem.controller.BaseController;import com.DocSystem.commonService.EmailService;import com.DocSystem.commonService.SmsService;@Controllerpublic class UserController extends BaseController {@Autowiredprivate UserServiceImpl userService;@Autowiredprivate SmsService smsService;@Autowiredprivate EmailService emailService;//用户登录接口@RequestMapping("/login.do")public void login(String userName,String pwd,String rememberMe,HttpServletRequest request,HttpSession session,HttpServletResponse response){System.out.println("login userName:"+userName + " pwd:" + pwd + " rememberMe:" + rememberMe);List<User> uList = userService.geAllUsers();if(uList == null || uList.size() == 0){//Add a default user(Admin)addAdminUser();}ReturnAjax rt = new ReturnAjax();//tmp_user is used for store the query conditionUser tmp_user = new User();tmp_user.setName(userName);tmp_user.setPwd(pwd);List<User> uLists = getUserList(userName,pwd);boolean ret =loginCheck(rt, tmp_user, uLists, session,response);if(ret == false){System.out.println("登录失败");writeJson(rt, response);return;}//Set sessionSystem.out.println("登录成功");session.setAttribute("login_user", uLists.get(0));System.out.println("SESSION ID:" + session.getId());//如果用户点击了保存密码则保存cookiesif(rememberMe!=null&&rememberMe.equals("1")){addCookie(response, "dsuser", userName, 7*24*60*60);//一周内免登录addCookie(response, "dstoken", pwd, 7*24*60*60);System.out.println("用户cookie保存成功");}//Feeback to pagert.setMsgInfo("success#登录成功!");rt.setData(uLists.get(0)); //将数据库取出的用户信息返回至前台writeJson(rt, response);return;}private void addAdminUser() {// TODO Auto-generated method stubUser user = new User();user.setName("Admin");user.setNickName("超级管理员");user.setPwd(MD5.md5("Admin"));user.setCreateType(0); //系统自动创建//set createTimeSimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式String createTime = df.format(new Date());// new Date()为获取当前系统时间user.setCreateTime(createTime); //设置时间user.setType(2);userService.addUser(user);}/*** 用户数据校验* @param uLists 根据条件从数据库中查出的user列表* @param rt 返回ajax信息的类* @param session* @param localUser 前台传回的user信息,或者cookies中保存的用户信息* @return*/private boolean loginCheck(ReturnAjax rt,User localUser, List<User> uLists,HttpSession session,HttpServletResponse response){if(uLists == null){System.out.println("loginCheck() uLists is null");rt.setError("fail#用户名或密码错误!");return false;}else if(uLists.size()<1){System.out.println("loginCheck() uLists size < 1");rt.setError("danger#对不起,您的账号或者密码错误!");return false;}else if(uLists.size()>1){//TODO系统异常需要处理System.out.println("loginCheck() uLists size > 1");rt.setError("danger#登录失败!");return false;}return true;}//获取当前登录用户信息@RequestMapping(value="getLoginUser")public void getLoginUser(HttpServletRequest request,HttpSession session,HttpServletResponse response){System.out.println("getLoginUser SESSION ID:" + session.getId());ReturnAjax rt = new ReturnAjax();User user = (User) session.getAttribute("login_user");if(user == null){//尝试自动登录Cookie c1 = getCookieByName(request, "dsuser");Cookie c2 = getCookieByName(request, "dstoken");if(c1!=null&&c2!=null&&c1.getValue()!=null&&c2.getValue()!=null&&!"".equals(c1.getValue())&&!"".equals(c2.getValue())){System.out.println("自动登录");String userName = c1.getValue();String pwd = c2.getValue();//tmp_user is used for store the query conditionUser tmp_user = new User();tmp_user.setName(userName);tmp_user.setPwd(pwd);List<User> uLists = getUserList(userName,pwd);boolean ret =loginCheck(rt, tmp_user, uLists, session,response);if(ret == false){System.out.println("自动登录失败");rt.setMsgData("自动登陆失败");writeJson(rt, response);return;}System.out.println("自动登录成功");//Set sessionsession.setAttribute("login_user", uLists.get(0));//延长cookie的有效期addCookie(response, "dsuser", userName, 7*24*60*60);//一周内免登录addCookie(response, "dstoken", pwd, 7*24*60*60);System.out.println("用户cookie保存成功");System.out.println("SESSION ID:" + session.getId());rt.setData(uLists.get(0)); //将数据库取出的用户信息返回至前台writeJson(rt, response);return;}else{rt.setError("用户未登录");writeJson(rt, response);return;}}//I not sure if the info in loginUser is lastest, so I need to get the usrInfo from databaseuser = userService.getUser(user.getId());rt.setData(user); //返回用户信息writeJson(rt, response);}//登出接口@RequestMapping(value="logout")public void logOut(HttpSession session,HttpServletResponse response,ModelMap model,String type){System.out.println("Logout SESSION ID:" + session.getId());ReturnAjax rt = new ReturnAjax();//删除cookie即将cookie的maxAge设置为0addCookie(response, "dsuser", null, 0);addCookie(response, "dstoken", null, 0);//清除sessionsession.removeAttribute("login_user");rt.setMsgInfo("info#您已成功退出登陆。");writeJson(rt, response);}//用户是否已注册检查接口@RequestMapping(value="checkUserRegistered")public void checkUserRegistered(String userName, HttpServletResponse response){System.out.println("checkUserRegistered userName:"+userName);ReturnAjax rt = new ReturnAjax();//检查用户名是否为空if(userName==null||"".equals(userName)){rt.setError("danger#账号不能为空!");writeJson(rt, response);return;}if(RegularUtil.isEmail(userName)) //邮箱注册{if(isUserRegistered(userName) == true){rt.setError("error#该邮箱已注册!");}writeJson(rt, response);return;}else if(RegularUtil.IsMobliePhone(userName)){if(isUserRegistered(userName) == true){rt.setError("error#该手机已注册!");}writeJson(rt, response);return;}else{rt.setError("danger#账号格式不正确!");writeJson(rt, response);return;}}//注册接口@RequestMapping(value="register")public void register(HttpSession session,String userName,String pwd,String pwd2,String verifyCode,HttpServletResponse response,ModelMap model){System.out.println("register userName:"+userName + " pwd:"+pwd + " pwd2:"+pwd2 + " verifyCode:"+verifyCode);ReturnAjax rt = new ReturnAjax();User user = new User();//检查用户名是否为空if(userName==null||"".equals(userName)){rt.setError("danger#账号不能为空!");writeJson(rt, response);return;}if(RegularUtil.isEmail(userName)) //邮箱注册{if(isUserRegistered(userName) == true){rt.setError("error#该邮箱已注册!");writeJson(rt, response);return;}user.setEmail(userName);user.setEmailValid(1);}else if(RegularUtil.IsMobliePhone(userName)){if(isUserRegistered(userName) == true){rt.setError("error#该手机已注册!");writeJson(rt, response);return;}user.setTel(userName);user.setTelValid(1);}else{rt.setError("danger#账号格式不正确!");writeJson(rt, response);return;}//检查验证码是否正确if(checkVerifyCode(session,"docsys_vcode", userName, verifyCode,1) == false){rt.setError("danger#验证码错误!");writeJson(rt, response);return;}//检查密码是否为空if(pwd==null||"".equals(pwd)){rt.setError("danger#密码不能为空!");writeJson(rt, response);return;}if(!pwd.equals(pwd2)) //要不要在后台检查两次密码不一致问题呢{System.out.println("注册密码:"+pwd);System.out.println("确认注册密码:"+pwd2);rt.setError("danger#两次密码不一致,请重试!");writeJson(rt, response);return;}user.setPwd(pwd);user.setName(userName); //默认用户名就用注册的名字user.setCreateType(1); //用户为自主注册//set createTimeSimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式String createTime = df.format(new Date());// new Date()为获取当前系统时间user.setCreateTime(createTime); //设置时间user.setType(0);if(isFirstUser() == true){user.setType(2);}userService.addUser(user);user.setPwd(""); //密码不要返回回去rt.setData(user);writeJson(rt, response);return;}public boolean isFirstUser(){List<User> uList = userService.geAllUsers();if(uList == null || uList.size() == 0){return true;}return false;}public User getUserByName(String name){User user = new User();user.setName(name);List<User> uList = userService.getUserListByUserInfo(user);if(uList == null || uList.size() == 0){return null;}return uList.get(0);}/*** 发送邮箱验证信息* @param response* @param userName type*/@RequestMapping("/sendVerifyCode.do")public void sendVerifyCode(String userName,Integer type,HttpSession session,HttpServletResponse response){System.out.println("sendVerifyCode userName:"+userName + " type:" + type);ReturnAjax rt = new ReturnAjax();if(userName == null || "".equals(userName)) //从session中取出用户名??{System.out.println("userName不能为空");rt.setError("error#请填写正确的邮箱或手机");writeJson(rt, response);return;}//根据注册类型不同,验证码需要放置在不同的session里面String sessionName = ""; //0 注册,1忘记密码if(type == null || "".equals(type)) //默认用于注册{type = 0; //默认验证码为用户注册}if(type == 0){sessionName = "docsys_vcode";}else{sessionName = "docsys_vcode" + type;}//如果是邮箱则发送到邮箱,否则发送到手机if(RegularUtil.isEmail(userName)) //邮箱注册{String code = generateVerifyCode(session,sessionName,userName);String content = "您收到了来自DocSys的验证码:" + code + ",15分钟内有效,请及时验证。";emailService.sendEmail(rt,userName,content);writeJson(rt, response);return;}else if(RegularUtil.IsMobliePhone(userName)){String code = generateVerifyCode(session,sessionName,userName);sendVerifyCodeSMS(rt,userName,type,code);writeJson(rt, response);return;}else{System.out.println("userName不是邮箱或手机");rt.setError("danger#请使用正确的邮箱手机!");writeJson(rt, response);return;}}private void sendVerifyCodeSMS(ReturnAjax rt, String userName, Integer type, String code) {switch(type.intValue()){case 0:smsService.sendSms(rt,userName, 1341175l, code, null, null); //注册短信模板idbreak;case 1:smsService.sendSms(rt,userName, 1341175l, code, null, null); //忘记密码短信模板idbreak;default:smsService.sendSms(rt,userName, 1341175l, code, null, null); //注册短信模板id}}//生成验证码: sessionVarName 保存验证码的session变量名public String generateVerifyCode(HttpSession session,String sessionVarName,String userName){String code = Math.round(Math.random() * 1000000) + "";while(code.length()<6){code = "0" + code;}//将验证码保存进session中,同时将session有效期改为15分钟,有点风险session.setAttribute(sessionVarName, userName+code);session.setMaxInactiveInterval(15*60);return code;}//检查验证码:successClear设置的话,则验证通过会清除public boolean checkVerifyCode(HttpSession session, String sessionVarName, String userName, String code,int successClear){code = userName+code;String code1 = (String) session.getAttribute(sessionVarName);if(code1!=null&&!"".equals(code1)&&code!=null&&!"".equals(code1)){if(code.equals(code1)){if(successClear == 1){//验证码用过一次后将不能再使用,将session改回24小时有效,session不需要一直有效,因为网页可能一直在线session.removeAttribute(sessionVarName);session.setMaxInactiveInterval(24*60*60);}return true;}else{return false;}}else{return false;}}@RequestMapping(value="checkVerifyCode")public void checkVerifyCode(HttpSession session,String userName,Integer type, String verifyCode,HttpServletResponse response,ModelMap model){System.out.println("checkVerifyCode userName:"+userName + " type:"+type + " verifyCode:"+verifyCode);ReturnAjax rt = new ReturnAjax();//检查用户名是否为空if(userName==null||"".equals(userName)){rt.setError("danger#账号不能为空!");writeJson(rt, response);return;}//检查验证码是否正确//根据注册类型不同,验证码需要放置在不同的session里面String sessionName = ""; //0 注册,1忘记密码if(type == null || "".equals(type)) //默认用于注册{type = 0; //默认验证码为用户注册}if(type == 0){sessionName = "docsys_vcode";}else{sessionName = "docsys_vcode" + type;}if(checkVerifyCode(session,sessionName, userName, verifyCode,0) == false){rt.setError("danger#验证码错误!");writeJson(rt, response);return;}//返回成功信息writeJson(rt, response);return;}//This function is for forget password@RequestMapping(value="changePwd")public void changePwd(HttpSession session,String userName,String pwd,String pwd2,String verifyCode,HttpServletResponse response,ModelMap model){System.out.println("changePwd userName:"+userName + " pwd:"+pwd + " pwd2:"+pwd2 + " verifyCode:"+verifyCode);ReturnAjax rt = new ReturnAjax();User qUser = new User();//检查用户名是否为空if(userName==null||"".equals(userName)){rt.setError("danger#账号不能为空!");writeJson(rt, response);return;}else if(RegularUtil.isEmail(userName)) //邮箱注册{qUser.setEmail(userName);}else if(RegularUtil.IsMobliePhone(userName)){qUser.setTel(userName);}else{rt.setError("danger#账号格式不正确!");writeJson(rt, response);return;}List<User> uList = getUserList(userName,null);if(uList == null || uList.size() == 0){rt.setError("用户不存在!");writeJson(rt, response);return;}//检查验证码是否正确if(checkVerifyCode(session,"docsys_vcode1", userName, verifyCode,1) == false){rt.setError("danger#验证码错误!");writeJson(rt, response);return;}//检查密码是否为空if(pwd==null||"".equals(pwd)){rt.setError("danger#密码不能为空!");writeJson(rt, response);return;}if(!pwd.equals(pwd2)) //要不要在后台检查两次密码不一致问题呢{System.out.println("密码:"+pwd);System.out.println("确认密码:"+pwd2);rt.setError("danger#两次密码不一致,请重试!");writeJson(rt, response);return;}//更新密码User user = new User();user.setId(uList.get(0).getId()); //设置UserIduser.setPwd(pwd);if(userService.updateUserInfo(user) == 0){System.out.println("设置密码失败!");rt.setError("设置密码失败!");writeJson(rt, response);return;}writeJson(rt, response);return;}@RequestMapping(value="modifyPwd")public void modifyPwd(HttpSession session,String userName,String pwd,String pwd2,String oldPwd,HttpServletResponse response,ModelMap model){System.out.println("changePwd userName:"+userName + " pwd:"+pwd + " pwd2:"+pwd2 + " oldPwd:"+oldPwd);ReturnAjax rt = new ReturnAjax();//检查用户名是否为空if(userName==null||"".equals(userName)){rt.setError("danger#账号不能为空!");writeJson(rt, response);return;}//Check the user oldPwdUser qUser = new User();qUser.setName(userName);qUser.setPwd(oldPwd);List<User> uList = userService.getUserListByUserInfo(qUser);if(uList == null || uList.size() == 0){rt.setError("用户名或密码错误!");writeJson(rt, response);return;}//检查密码是否为空if(pwd==null||"".equals(pwd)){rt.setError("danger#密码不能为空!");writeJson(rt, response);return;}if(!pwd.equals(pwd2)) //要不要在后台检查两次密码不一致问题呢{System.out.println("密码:"+pwd);System.out.println("确认密码:"+pwd2);rt.setError("danger#两次密码不一致,请重试!");writeJson(rt, response);return;}//更新密码User user = new User();user.setId(uList.get(0).getId()); //设置UserIduser.setPwd(pwd);if(userService.updateUserInfo(user) == 0){System.out.println("设置密码失败!");rt.setError("设置密码失败!");writeJson(rt, response);return;}writeJson(rt, response);return;}@RequestMapping(value="updateLoginUserInfo")public void updateLoginUserInfo(HttpSession session,String userName,String nickName,String realName,String intro,HttpServletResponse response,ModelMap model){System.out.println("updateUserInfo userName:"+userName + " nickName:"+nickName + " realName:"+realName + " intro:"+intro);ReturnAjax rt = new ReturnAjax();//检查用户名是否为空,注意用户名真的是用户名,不是指绑定的手机和邮箱if(userName==null||"".equals(userName)){System.out.println("updateUserInfo() userName is empty!");rt.setError("danger#账号不能为空!");writeJson(rt, response);return;}//Check if user is loginUser loginUser = (User) session.getAttribute("login_user");if(loginUser == null){System.out.println("updateUserInfo() 用户未登陆!");rt.setError("用户未登陆!");writeJson(rt, response);return;}if(!userName.equals(loginUser.getName())){System.out.println("updateUserInfo() 不能修改其他用户的信息!");rt.setError("修改用户信息失败!");writeJson(rt, response);return;}//Try to find the UserUser user = getUserByName(userName);if(user == null){rt.setError("danger#用户不存在!");writeJson(rt, response);return;}//检查用户名是否为空if(realName!=null&&"".equals(realName)){rt.setError("danger#真实姓名不能为空!");writeJson(rt, response);return;}if(nickName!=null&&"".equals(nickName)){rt.setError("danger#昵称不能为空!");writeJson(rt, response);return;}User newUserInfo = new User();newUserInfo.setId(user.getId());newUserInfo.setNickName(nickName);newUserInfo.setRealName(realName);newUserInfo.setIntro(intro);if(userService.updateUserInfo(newUserInfo) == 0){rt.setError("danger#用户信息更新失败!");writeJson(rt, response);return;}syncUpLoginUserInfo(newUserInfo,loginUser);writeJson(rt, response);return;}private void syncUpLoginUserInfo(User user,User loginUser){if(user.getNickName() != null){loginUser.setNickName(user.getNickName());}if(user.getRealName() != null){loginUser.setRealName(user.getRealName());}if(user.getIntro() != null){loginUser.setNickName(user.getIntro());}}@RequestMapping(value="uploadUserImg")public void uploadUserImg(MultipartFileParam param, HttpServletRequest request, HttpServletResponse response,HttpSession session) throws Exception{System.out.println("uploadUserImg() filename:"+param.getName() + " size:" + param.getSize() + " Uid:" +param.getUid());ReturnAjax rt = new ReturnAjax();//Check if user is loginUser loginUser = (User) session.getAttribute("login_user");if(loginUser == null){System.out.println("uploadUserImg() 用户未登陆!");rt.setError("用户未登陆!");writeJson(rt, response);return;}//Save the fileMultipartFile uploadFile = param.getFile();if (uploadFile == null){System.out.println("uploadUserImg() uploadFile is null!");rt.setError("文件上传失败!");writeJson(rt, response);return;}/*保存文件*/System.out.println("uploadFile size is :" + uploadFile.getSize());String userImgName = saveUserImg(uploadFile,loginUser);if(userImgName == null){System.out.println("uploadUserImg() saveFile Failed!");rt.setMsgData("uploadUserImg() saveFile Failed!");rt.setError("文件上传失败!");writeJson(rt, response);return;}//Set the user img infoString userImgUrl = userImgName;User user = new User();user.setId(loginUser.getId());user.setImg(userImgUrl);if(userService.updateUserInfo(user) == 0){System.out.println("uploadUserImg() updateUserInfo Failed!");rt.setMsgData("uploadUserImg() updateUserInfo Failed!");rt.setError("用户头像更新失败!");writeJson(rt, response);return;}loginUser.setImg(userImgUrl);rt.setData(loginUser);writeJson(rt, response);}private String saveUserImg(MultipartFile uploadFile,User user){String fileName = uploadFile.getOriginalFilename();String imgDirPath = getUserImgPath();System.out.println("imgDirPath:" + imgDirPath);File dir = new File(imgDirPath);if (!dir.exists()) {if(dir.mkdirs() == false){return null;}}String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);String usrImgName = user.getId()+"_"+ MD5.md5(fileName) + "." + suffix;String retName = null;try {retName = saveFile(uploadFile, imgDirPath,usrImgName);} catch (Exception e) {System.out.println("saveUserImg() saveFile " + usrImgName +" 异常!");e.printStackTrace();return null;}System.out.println("saveUserImg() saveFile return: " + retName);if(retName == null || !retName.equals(usrImgName)){System.out.println("updateRealDoc() saveFile " + usrImgName +" Failed!");return null;}return retName;}private String getUserImgPath(){//String rootPath = getCurrentAppPath();String rootPath = getDocSysDataPath();String imgDirPath = rootPath + "uploads/userImg/";return imgDirPath;}private String getCurrentAppPath() {WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();String currentAppPath = wac.getServletContext().getRealPath("/");return currentAppPath;}private String getDocSysDataPath() {String docSysDataPath = "";String os = System.getProperty("os.name");System.out.println("OS:"+ os);if(os.toLowerCase().startsWith("win")){docSysDataPath = "D:/DocSysData/";}else{docSysDataPath = "/data/DocSysData/"; //Linux系统放在 /data}return docSysDataPath;}//This interface is for getUserImg if useImgs not under tomcat@RequestMapping(value="getUserImg")public void getUserImg(String fileName, HttpServletRequest request, HttpServletResponse response,HttpSession session) throws Exception{System.out.println("getUserImg() fileName:" + fileName);//解决中文编码问题if(request.getHeader("User-Agent").toUpperCase().indexOf("MSIE")>0){fileName = URLEncoder.encode(fileName, "UTF-8");}else{fileName = new String(fileName.getBytes("UTF-8"),"ISO8859-1");}System.out.println("getUserImg fileName:" + fileName);//String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);//解决空格问题response.setHeader("content-disposition", "attachment;filename=\"" + fileName +"\"");response.setHeader("Content-Type","image/jped");//读取要下载的文件,保存到文件输入流String dstPath = getUserImgPath() + fileName;FileInputStream in = new FileInputStream(dstPath);//创建输出流OutputStream out = response.getOutputStream();//创建缓冲区byte buffer[] = new byte[1024];int len = 0;//循环将输入流中的内容读取到缓冲区当中while((len=in.read(buffer))>0){//输出缓冲区的内容到浏览器,实现文件下载out.write(buffer, 0, len);}//关闭文件输入流in.close();//关闭输出流out.close();}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。