diff --git a/src/main/java/cn/hellohao/controller/IndexController.java b/src/main/java/cn/hellohao/controller/IndexController.java index af7ab92..241bde8 100644 --- a/src/main/java/cn/hellohao/controller/IndexController.java +++ b/src/main/java/cn/hellohao/controller/IndexController.java @@ -6,6 +6,7 @@ import cn.hellohao.service.*; import cn.hellohao.service.impl.AlbumServiceImpl; import cn.hellohao.service.impl.UploadServicel; import cn.hellohao.service.impl.deleImages; +import cn.hellohao.utils.GetIPS; import cn.hellohao.utils.MyVersion; import cn.hellohao.utils.verifyCode.IVerifyCodeGen; import cn.hellohao.utils.verifyCode.SimpleCharVerifyCodeGenImpl; @@ -20,6 +21,7 @@ import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -30,6 +32,7 @@ import java.io.IOException; import java.util.List; import java.util.Timer; import java.util.TimerTask; +import java.util.UUID; @Controller public class IndexController { @@ -46,10 +49,20 @@ public class IndexController { @Autowired private deleImages deleimages; @Autowired + IRedisService iRedisService; + @Autowired AlbumServiceImpl albumService; @Autowired AppClientService appClientService; + @RequestMapping(value = "/") + public String Welcome(Model model, HttpServletRequest httpServletRequest) { + model.addAttribute("name","服务端程序"); + model.addAttribute("version","20221027"); + model.addAttribute("ip",GetIPS.getIpAddr(httpServletRequest)); + model.addAttribute("links","tbed.hellohao.cn"); + return "welcome"; + } @RequestMapping(value = "/webInfo") @ResponseBody @@ -194,82 +207,90 @@ public class IndexController { return msg; } - @GetMapping("/verifyCode") - public void verifyCode(HttpServletRequest request, HttpServletResponse response,HttpSession httpSession) { - IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl(); + + @PostMapping("/verifyCode") + @ResponseBody + public Msg verifyCode() { + Msg msg = new Msg(); try { ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(90, 35, 2, 2); captcha.setGenerator(new MathGenerator(1)); - httpSession.setAttribute("_hellohao_verifyCode",captcha); - response.setHeader("Pragma", "no-cache"); - response.setHeader("Cache-Control", "no-cache"); - response.setDateHeader("Expires", 0); - response.setContentType("image/jpeg"); - captcha.write(response.getOutputStream()); - final Timer timer=new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - httpSession.removeAttribute("_hellohao_verifyCode"); - timer.cancel(); - } - },5*60*1000); - response.getOutputStream().flush(); - } catch (IOException e) { + String code = getVerifyCodeOperator(captcha.getCode()); + String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); + iRedisService.setValue("verifyCode_"+uid,code); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("codeKey",uid); + jsonObject.put("codeImg",captcha.getImageBase64()); + msg.setData(jsonObject); + return msg; + } catch (Exception e) { e.printStackTrace(); + msg.setCode("500"); + return msg; } } - @GetMapping("/verifyCodeForRegister") - public void verifyCodeForRegister(HttpServletRequest request, HttpServletResponse response,HttpSession httpSession) { - IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl(); + @PostMapping("/verifyCodeForRegister") + @ResponseBody + public Msg verifyCodeForRegister() { + Msg msg = new Msg(); try { ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(90, 35, 2, 2); - httpSession.setAttribute("_hellohao_verifyCodeForRegister",captcha); - response.setHeader("Pragma", "no-cache"); - response.setHeader("Cache-Control", "no-cache"); - response.setDateHeader("Expires", 0); - response.setContentType("image/jpeg"); - captcha.write(response.getOutputStream()); - final Timer timer=new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - httpSession.removeAttribute("_hellohao_verifyCodeForRegister"); - timer.cancel(); - } - },5*60*1000); - response.getOutputStream().flush(); - } catch (IOException e) { - e.printStackTrace(); + captcha.setGenerator(new MathGenerator(1)); + String code = getVerifyCodeOperator(captcha.getCode()); + String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); + iRedisService.setValue("verifyCodeForRegister_"+uid,code); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("codeKey",uid); + jsonObject.put("codeImg",captcha.getImageBase64()); + msg.setData(jsonObject); + return msg; + } catch (Exception e) { + e.printStackTrace();msg.setCode("500"); + return msg; } } - @GetMapping("/verifyCodeForRetrieve") - public void verifyCodeForRetrieve(HttpServletRequest request, HttpServletResponse response,HttpSession httpSession) { - IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl(); + @PostMapping("/verifyCodeForRetrieve") + @ResponseBody + public Msg verifyCodeForRetrieve() { + Msg msg = new Msg(); try { ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(90, 35, 2, 2); - httpSession.setAttribute("_hellohao_verifyCodeForEmailRetrieve",captcha); - response.setHeader("Pragma", "no-cache"); - response.setHeader("Cache-Control", "no-cache"); - response.setDateHeader("Expires", 0); - response.setContentType("image/jpeg"); - captcha.write(response.getOutputStream()); - final Timer timer=new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - httpSession.removeAttribute("_hellohao_verifyCodeForEmailRetrieve"); - timer.cancel(); - } - },5*60*1000); - response.getOutputStream().flush(); - } catch (IOException e) { + captcha.setGenerator(new MathGenerator(1)); + String code = getVerifyCodeOperator(captcha.getCode()); + String uid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); + iRedisService.setValue("verifyCodeForRetrieve_"+uid,code); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("codeKey",uid); + jsonObject.put("codeImg",captcha.getImageBase64()); + msg.setData(jsonObject); + return msg; + } catch (Exception e) { e.printStackTrace(); + msg.setCode("500"); + return msg; } } + public static String getVerifyCodeOperator(String str){ + int a = Integer.valueOf(str.substring(0,1)); + String yxf = str.substring(1,2); + int b = Integer.valueOf(str.substring(2,3)); + switch(yxf) { + case "*": + return Integer.toString(a * b); + case "+": + return Integer.toString(a + b); + case ",": + default: + return Integer.toString(82); + case "-": + return Integer.toString(a - b); + } + + } + @PostMapping({"/deleImagesByUid","/client/deleImagesByUid"}) @ResponseBody public Msg deleImagesByUid(@RequestParam(value = "data", defaultValue = "") String data) { diff --git a/src/main/java/cn/hellohao/controller/MainsiteErrorController.java b/src/main/java/cn/hellohao/controller/MainsiteErrorController.java new file mode 100644 index 0000000..2f5b942 --- /dev/null +++ b/src/main/java/cn/hellohao/controller/MainsiteErrorController.java @@ -0,0 +1,46 @@ +package cn.hellohao.controller; + +import cn.hellohao.pojo.Msg; +import org.springframework.boot.web.servlet.error.ErrorController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +/** + * 错误页面拦截 + * */ + +@Controller +class MainsiteErrorController implements ErrorController { + + @RequestMapping("/error") + @ResponseBody + public Msg handleError(HttpServletRequest request){ + Msg msg = new Msg(); + msg.setExceptions("Error intercepted by Hellohao"); + //获取statusCode:401,404,500 + Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); + if(statusCode == 401){ + msg.setCode("401"); + msg.setInfo("Request error for 401"); + return msg; + }else if(statusCode == 404){ + msg.setCode("404"); + msg.setInfo("Request not found 404"); + return msg; + }else if(statusCode == 403){ + msg.setCode("403"); + msg.setInfo("Request error for 403"); + return msg; + }else{ + msg.setCode("500"); + msg.setInfo("System internal error"); + return msg; + } + + } + + +} \ No newline at end of file diff --git a/src/main/java/cn/hellohao/controller/UserController.java b/src/main/java/cn/hellohao/controller/UserController.java index 9b49abd..f83430c 100644 --- a/src/main/java/cn/hellohao/controller/UserController.java +++ b/src/main/java/cn/hellohao/controller/UserController.java @@ -45,15 +45,14 @@ public class UserController { @PostMapping("/register") @ResponseBody - public Msg Register(HttpSession httpSession, @RequestParam(value = "data", defaultValue = "") String data) {//Validated + public Msg Register(HttpServletRequest httpServletRequest, @RequestParam(value = "data", defaultValue = "") String data) { Msg msg = new Msg(); JSONObject jsonObj = JSONObject.parseObject(data); String username = jsonObj.getString("username"); String email = jsonObj.getString("email"); String password = Base64Encryption.encryptBASE64(jsonObj.getString("password").getBytes()); String verifyCodeForRegister = jsonObj.getString("verifyCode"); - ShearCaptcha redis_verifyCodeForRegister = (ShearCaptcha) httpSession.getAttribute("_hellohao_verifyCodeForRegister");//iRedisService.getValue(userIP+"_verifyCodeForRegister"); - if(!SetText.checkEmail(email)){ + Object redis_verifyCodeForRegister = iRedisService.getValue("verifyCodeForRegister_"+httpServletRequest.getHeader("verifyCodeForRegister")); if(!SetText.checkEmail(email)){ msg.setCode("110403"); msg.setInfo("邮箱格式不正确"); return msg; @@ -73,7 +72,7 @@ public class UserController { msg.setInfo("验证码不能为空。"); return msg; } - if(redis_verifyCodeForRegister.verify(verifyCodeForRegister.toLowerCase())){ + if((redis_verifyCodeForRegister.toString().toLowerCase()).compareTo((verifyCodeForRegister.toLowerCase()))==0){ User user = new User(); UploadConfig updateConfig = uploadConfigService.getUpdateConfig(); EmailConfig emailConfig = emailConfigService.getemail(); @@ -131,13 +130,13 @@ public class UserController { @PostMapping("/login") @ResponseBody - public Msg login(HttpServletRequest request,HttpSession httpSession,@RequestParam(value = "data", defaultValue = "") String data) { + public Msg login(HttpServletRequest httpServletRequest, @RequestParam(value = "data", defaultValue = "") String data) { Msg msg = new Msg(); JSONObject jsonObj = JSONObject.parseObject(data); String email = jsonObj.getString("email"); String password = Base64Encryption.encryptBASE64(jsonObj.getString("password").getBytes()); String verifyCode = jsonObj.getString("verifyCode"); - ShearCaptcha redis_VerifyCode = (ShearCaptcha)httpSession.getAttribute("_hellohao_verifyCode"); + Object redis_VerifyCode = iRedisService.getValue("verifyCode_"+httpServletRequest.getHeader("verifyCode")); if(null==redis_VerifyCode){ msg.setCode("4035"); msg.setInfo("验证码已失效,请重新弄获取。"); @@ -147,7 +146,7 @@ public class UserController { msg.setInfo("验证码不能为空。"); return msg; } - if(redis_VerifyCode.verify(verifyCode.toLowerCase())){ + if((redis_VerifyCode.toString().toLowerCase()).compareTo((verifyCode.toLowerCase()))==0){ Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken tokenOBJ = new UsernamePasswordToken(email,password); tokenOBJ.setRememberMe(true); @@ -237,13 +236,13 @@ public class UserController { @PostMapping("/retrievePass") @ResponseBody - public Msg retrievePass(HttpServletRequest request,HttpSession httpSession, @RequestParam(value = "data", defaultValue = "") String data) { + public Msg retrievePass(HttpServletRequest httpServletRequest, @RequestParam(value = "data", defaultValue = "") String data) { Msg msg = new Msg(); try { JSONObject jsonObj = JSONObject.parseObject(data); String email = jsonObj.getString("email"); String retrieveCode = jsonObj.getString("retrieveCode"); - ShearCaptcha redis_verifyCodeForEmailRetrieve =(ShearCaptcha) httpSession.getAttribute("_hellohao_verifyCodeForEmailRetrieve");// iRedisService.getValue(userIP+"_verifyCodeForEmailRetrieve"); + Object redis_verifyCodeForEmailRetrieve =iRedisService.getValue("verifyCodeForRetrieve_"+httpServletRequest.getHeader("verifyCodeForRetrieve")); EmailConfig emailConfig = emailConfigService.getemail(); if(null==redis_verifyCodeForEmailRetrieve){ msg.setCode("4035"); @@ -254,12 +253,11 @@ public class UserController { msg.setInfo("验证码不能为空。"); return msg; } - if(!redis_verifyCodeForEmailRetrieve.verify(retrieveCode.toLowerCase())){ + if((redis_verifyCodeForEmailRetrieve.toString().toLowerCase()).compareTo((retrieveCode.toLowerCase()))!=0){ msg.setCode("40034"); msg.setInfo("验证码不正确"); return msg; } - Integer ret = userService.countmail(email); if(ret>0){ if(emailConfig.getUsing()==1){ diff --git a/src/main/resources/templates/welcome.html b/src/main/resources/templates/welcome.html new file mode 100644 index 0000000..6051c3e --- /dev/null +++ b/src/main/resources/templates/welcome.html @@ -0,0 +1,64 @@ + + +
+ +