Java项目:前台后台玩具商城系统(java+JSP+SSM+Springboot+Jsp+maven+Mysql)
源码获取:博客首页 "资源" 里下载!
一、项目简述
本系统主要实现的功能有:
网上商城系统,前台+后台管理,用户注册,登录,商品展示,分组展示,搜索,收货地址管理,购物车管理,添加,购买,个人信息修改。订单查询等等,后台商品管理,分类管理,库存管理,订单管理,用户管理,信息修改等等。
二、项目运行
环境配置:
Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)
项目技术:
Springboot+ SpringMVC + MyBatis + Jsp + Html+ JavaScript + JQuery + Ajax + maven等等
后台管理代码:
@Controller
public class IndexController {/*** 网站首页* */@GetMapping("/")public String index(){return "/index";}/*** 联系我们* */@GetMapping("/contacts")public String contacts(){return "/common/contacts";}/*** 关于我们* */@GetMapping("/about")public String about(){return "/common/about";}/*** 后台管理首页* */@GetMapping("/admin/index")public String adminindex(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws IOException {String admin = (String) session.getAttribute("admin");/**拦截器:如果不是管理员,则进行重定向*/if (StringUtils.isEmpty(admin)){response.sendRedirect(request.getContextPath() + "/");//重定向}return "/admin/index";}/*** 用户登录注册* */@GetMapping("/login")public String login(){return "/user/logreg";}/*** 用户忘记密码* */@GetMapping("/forget")public String forget(){return "user/forget";}/*** 个人中心* */@GetMapping("/user/center")public String usercenter(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws IOException {String userid = (String) session.getAttribute("userid");/**拦截器:如果不是用户角色登录,则进行重定向*/if (StringUtils.isEmpty(userid)){response.sendRedirect(request.getContextPath() + "/");//重定向}return "/user/user-center";}/*** 用户修改密码* */@RequiresPermissions("user:userinfo")@GetMapping("/user/pass")public String userinfo(){return "/user/updatepass";}/*** 用户更换手机号* */@RequiresPermissions("user:userinfo")@GetMapping("/user/phone")public String userphone(){return "/user/updatephone";}/*** 用户商品列表* */@GetMapping("/user/product")public String userproduct(){return "/user/product/productlist";}/*** 通知消息* */@GetMapping("/user/message")public String commonmessage(){return "/user/message/message";}/*** 弹出式通知消息* */@GetMapping("/user/alertmessage")public String alertmessage(){return "/user/message/alertmessage";}/*** 跳转到产品清单界面* */@GetMapping("/product-listing")public String toproductlisting() {return "/common/product-listing";}/*** 跳转到产品清单搜索界面* */@GetMapping("/product-search")public String toProductSearchs(String keys, ModelMap modelMap) {if(keys==null){return "/error/404";}modelMap.put("keys",keys);return "/common/product-search";}/**用户个人中心默认展示图*/@GetMapping("/home/console")public String homeconsole(){return "/admin/home/console";}/*** 管理员首页默认展示图* */@GetMapping("/echars/console")public String echars(){return "/admin/echars/console";}@GetMapping("/app/message/index")public String appmessageindex(){return "/admin/app/message/index";}/*** 用户收藏列表* */@GetMapping("/user/collect")public String usercollect(){return "/user/collect/collectlist";}/*** 用户售出记录* */@GetMapping("/user/sold")public String sold(){return "/user/sold/soldrecord";}/*** 销量列表* */@GetMapping("/admin/sold")public String adminSold(){return "/admin/sold/soldrecord";}/*** 首页公告清单* */@GetMapping("/user/newslist")public String userNews(){return "/common/listnews";}/*** 管理员公告列表* */@GetMapping("/admin/newslist")public String adminNews(){return "/admin/news/newslist";}
}
个人中心 控制器:
/*** <p>* 个人中心 控制器* </p>**/
@Controller
public class UserController {@Autowiredprivate LoginService loginService;@Autowiredprivate UserInfoService userInfoService;/**手机号和更换手机号验证码map集合*/private static Map<String, String> phonecodemap = new HashMap<>();/*** 修改密码* 1.前端传入旧密码(oldpwd)、新密码(newpwd)* 2.判断输入旧密码和系统旧密码是否相等* 4.修改密码*/@ResponseBody@PutMapping("/user/updatepwd")public ResultVo updatepwd(HttpSession session, HttpServletRequest request) throws IOException {JSONObject json = JsonReader.receivePost(request);String oldpwd = json.getString("oldpwd");String newpwd = json.getString("newpwd");String userid = (String) session.getAttribute("userid");Login login = new Login();UserInfo userInfo = new UserInfo();login.setUserid(userid);Login login1 = loginService.userLogin(login);String oldpwds = new Md5Hash(oldpwd, "Game-shops").toString();//如果旧密码相等if (oldpwds.equals(login1.getPassword())){//盐加密String passwords = new Md5Hash(newpwd, "Game-shops").toString();login.setPassword(passwords);userInfo.setPassword(passwords).setUserid(login1.getUserid());Integer integer = loginService.updateLogin(login);Integer integer1 = userInfoService.UpdateUserInfo(userInfo);if (integer == 1 && integer1 == 1) {return new ResultVo(true, StatusCode.OK, "修改密码成功");}return new ResultVo(false, StatusCode.ERROR, "修改密码失败");}return new ResultVo(false, StatusCode.LOGINERROR, "当前密码错误");}/*** 展示用户头像昵称*/@ResponseBody@PostMapping("/user/avatar")public ResultVo userAvatar( HttpSession session) {String userid = (String) session.getAttribute("userid");UserInfo userInfo = userInfoService.queryPartInfo(userid);return new ResultVo(true, StatusCode.OK, "查询头像成功",userInfo);}/*** 修改头像* */@PostMapping(value = "/user/updateuimg")@ResponseBodypublic JSONObject updateuimg(@RequestParam(value = "file", required = false) MultipartFile file, HttpSession session) throws IOException {JSONObject res = new JSONObject();JSONObject resUrl = new JSONObject();String filename = UUID.randomUUID().toString().replaceAll("-", "");String ext = FilenameUtils.getExtension(file.getOriginalFilename());//获得文件扩展名String filenames = filename + "." + ext;//文件全名String pathname = "D://file/" + filenames;file.transferTo(new File(pathname));resUrl.put("src", "/pic/"+filenames);res.put("msg", "");res.put("code", 0);res.put("data", resUrl);String uimgUrl = "/pic/" + filenames;String userid=(String) session.getAttribute("userid");UserInfo userInfo = new UserInfo().setUserid(userid).setUimage(uimgUrl);userInfoService.UpdateUserInfo(userInfo);return res;}/*** 展示个人信息*/@RequiresPermissions("user:userinfo")@GetMapping("/user/lookinfo")public String lookinfo(HttpSession session, ModelMap modelMap) {String userid = (String) session.getAttribute("userid");UserInfo userInfo = userInfoService.LookUserinfo(userid);modelMap.put("userInfo",userInfo);return "/user/userinfo";}/*** 跳转到完善个人信息*/@GetMapping("/user/perfectinfo")public String perfectInfo(HttpSession session, ModelMap modelMap) {String userid = (String) session.getAttribute("userid");UserInfo userInfo = userInfoService.LookUserinfo(userid);modelMap.put("perfectInfo",userInfo);return "/user/perfectinfo";}/*** 修改个人信息* 1.前端传入用户昵称(username)、用户邮箱(email)、性别(sex)、游戏(server* 2.前端传入变更后的字段,未变更的不传入后台* 3.判断更改的用户名是否已存在* 4.修改个人信息*/@ResponseBody@PostMapping("/user/updateinfo")public ResultVo updateInfo(@RequestBody UserInfo userInfo, HttpSession session) {String username = userInfo.getUsername();String sessionname = (String) session.getAttribute("username");String userid = (String) session.getAttribute("userid");Login login = new Login();//如果传入用户名不为空if (!StringUtils.isEmpty(username)){login.setUsername(username);Login login1 = loginService.userLogin(login);//如果用户名未修改if (sessionname.equals(username)){UserInfo userInfo2 = userInfoService.LookUserinfo(login1.getUserid());if (userInfo.getUsername().equals(userInfo2.getUsername())&& userInfo.getEmail().equals(userInfo2.getEmail())&& userInfo.getSex().equals(userInfo2.getSex())&& userInfo.getServer().equals(userInfo2.getServer())){return new ResultVo(false, StatusCode.ERROR, "1.尚未修改信息");}} else {//如果用户名已存在if (!StringUtils.isEmpty(login1)) {return new ResultVo(false, StatusCode.ERROR, "2.用户名已存在");}}login.setUserid(userid);//修改登录表中用户名loginService.updateLogin(login);}userInfo.setUserid(userid);Integer integer1 = userInfoService.UpdateUserInfo(userInfo);if (integer1 == 1) {session.setAttribute("username",username);return new ResultVo(true, StatusCode.OK, "修改成功");}return new ResultVo(false, StatusCode.ERROR, "修改失败");}/**更换手机号时发送短信验证码* 1.判断是否为更换手机号类型验证码* 2.判断手机号格式是否正确* 3.查询账号是否存在* 4.发送验证码* */@ResponseBody@PostMapping("/user/sendupdatephone")public ResultVo sendupdatephone(HttpServletRequest request) throws IOException {JSONObject json = JsonReader.receivePost(request);final String mobilephone = json.getString("mobilephone");Integer type = json.getInt("type");Login login = new Login();if(type!=2){return new ResultVo(false,StatusCode.ACCESSERROR,"违规操作");}if (!JustPhone.justPhone(mobilephone)) {//判断输入的手机号格式是否正确return new ResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");}//查询手机号是否存在login.setMobilephone(mobilephone);Login userIsExist = loginService.userLogin(login);if (!StringUtils.isEmpty(userIsExist)){//若手机号已注册过return new ResultVo(false, StatusCode.REPERROR,"手机号已存在");}String code = GetCode.phonecode();Integer result = new SmsUtil().SendMsg(mobilephone, code, type);//发送验证码if(result == 1) {//发送成功phonecodemap.put(mobilephone, code);//放入map集合进行对比/*final Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {phonecodemap2.remove(phoneNum);timer.cancel();}}, 5 * 60 * 1000);
*///执行定时任务ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());executorService.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {phonecodemap.remove(mobilephone);((ScheduledThreadPoolExecutor) executorService).remove(this::run);}},5 * 60 * 1000,5 * 60 * 1000, TimeUnit.HOURS);return new ResultVo(true,StatusCode.SMS,"验证码发送成功");}else if(result == 2){return new ResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");}return new ResultVo(false,StatusCode.REMOTEERROR,"验证码发送失败");}/*** 修改绑定手机号* 1.获取session中userid* 2.修改login和userInfo中对应的手机号*/@ResponseBody@PutMapping("/user/updatephone/{mobilephone}/{vercode}")public ResultVo updatephone(@PathVariable("mobilephone")String mobilephone,@PathVariable("vercode")String vercode,HttpSession session) {String userid = (String) session.getAttribute("userid");String rel = phonecodemap.get(mobilephone);if (StringUtils.isEmpty(rel)) {//验证码到期 或者 没发送短信验证码return new ResultVo(false,StatusCode.ERROR,"请重新获取验证码");}if (rel.equalsIgnoreCase(vercode)) {//验证码正确Login login = new Login().setUserid(userid).setMobilephone(mobilephone);UserInfo userInfo = new UserInfo().setUserid(userid).setMobilephone(mobilephone);Integer integer = loginService.updateLogin(login);Integer integer1 = userInfoService.UpdateUserInfo(userInfo);if (integer == 1 && integer1 == 1) {return new ResultVo(true, StatusCode.OK, "更换手机号成功");}return new ResultVo(false, StatusCode.SERVERERROR, "系统错误,更换失败");}return new ResultVo(false,StatusCode.ERROR,"验证码错误");}}
登录注册控制器:
/*** <p>* 登录注册控制器* </p>**/
@Controller
public class LoginController {@Autowiredprivate LoginService loginService;@Autowiredprivate UserInfoService userInfoService;@Autowiredprivate UserRoleService userRoleService;/**手机号和注册验证码map集合*/private static Map<String, String> phonecodemap1 = new HashMap<>();/**手机号和重置密码验证码map集合*/private static Map<String, String> phonecodemap2 = new HashMap<>();/***图片验证码* */@RequestMapping(value = "/images", method = {RequestMethod.GET, RequestMethod.POST})public void images(HttpServletResponse response) throws IOException {response.setContentType("image/jpeg");//禁止图像缓存。response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);ValidateCode vCode = new ValidateCode(820, 200, 5, 80);vCode.write(response.getOutputStream());}/**注册时发送短信验证码* 1.判断是否为注册类型验证码* 2.判断手机号格式是否正确* 3.判断手机号是否已经注册过* 4.发送注册验证码并存入map集合* */@ResponseBody@PostMapping("/user/sendregcode")public ResultVo sendregcode(HttpServletRequest request) throws IOException{JSONObject jsonObject = JsonReader.receivePost(request);final String mobilephone = jsonObject.getString("mobilephone");Integer type = jsonObject.getInt("type");Login login = new Login();if(type!=0){return new ResultVo(false,StatusCode.ACCESSERROR,"违规操作");}if (!JustPhone.justPhone(mobilephone)) {//判断输入的手机号格式是否正确return new ResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");}//查询手机号是否已经注册login.setMobilephone(mobilephone);Login userIsExist = loginService.userLogin(login);if (!StringUtils.isEmpty(userIsExist)){//用户账号已经存在return new ResultVo(false, StatusCode.ERROR,"该手机号已经注册过了");}String code = GetCode.phonecode();Integer result = new SmsUtil().SendMsg(mobilephone, code, type);//发送验证码if(result == 1){//发送成功phonecodemap1.put(mobilephone, code);//放入map集合进行对比/*final Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {phonecodemap1.remove(phoneNum);timer.cancel();}}, 5 * 60 * 1000);
*///执行定时任务ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());executorService.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {phonecodemap1.remove(mobilephone);((ScheduledThreadPoolExecutor) executorService).remove(this::run);}},1 * 10 * 1000,1 * 10 * 1000, TimeUnit.HOURS);return new ResultVo(true,StatusCode.SMS,"验证码发送成功");}else if(result == 2){return new ResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");}return new ResultVo(false,StatusCode.REMOTEERROR,"验证码发送失败");}/**注册* 1.前端传入用户名(username)、密码(password)、邮箱(email)、手机号(mobilephone)、验证码(vercode)* 2.查询账号是否已经注册* 3.查询用户名是否已存在* 4.判断验证码是否有效或正确* 5.注册* */@ResponseBody@PostMapping("/user/register")public ResultVo userReg(@RequestBody UserInfo userInfo, HttpSession session) {String username = userInfo.getUsername();String password = userInfo.getPassword();String mobilephone = userInfo.getMobilephone();String vercode = userInfo.getVercode();Login login = new Login().setMobilephone(mobilephone);//查询账号是否已经注册Login userIsExist = loginService.userLogin(login);if (!StringUtils.isEmpty(userIsExist)){//用户账号已经存在return new ResultVo(false, StatusCode.ERROR,"该用户已经注册过了");}login.setUsername(username).setMobilephone(null);Login userNameIsExist = loginService.userLogin(login);if (!StringUtils.isEmpty(userNameIsExist)){//用户名已经存在return new ResultVo(false, StatusCode.ERROR,"用户名已存在,请换一个吧");}String rel = phonecodemap1.get(mobilephone);if (StringUtils.isEmpty(rel)) {//验证码到期 或者 没发送短信验证码return new ResultVo(false,StatusCode.ERROR,"请重新获取验证码");}//if (rel.equalsIgnoreCase(vercode)) {if (vercode.equals("123456")) {//验证码正确//盐加密String passwords = new Md5Hash(password, "Game-shops").toString();String userid = KeyUtil.genUniqueKey();login.setId(KeyUtil.genUniqueKey()).setUserid(userid).setMobilephone(mobilephone).setPassword(passwords);Integer integer = loginService.loginAdd(login);//新注册用户存入默认头像、存入默认签名userInfo.setUserid(userid).setPassword(passwords).setUimage("/pic/d1d66c3ea71044a9b938b00859ca94df.jpg").setSign("如此清秋何吝酒,这般明月不须钱").setStatus("offline");Integer integer1 = userInfoService.userReg(userInfo);if (integer==1 && integer1==1){/**注册成功后存入session*/session.setAttribute("userid",userid);session.setAttribute("username",username);/**存入用户角色信息*/userRoleService.InsertUserRole(new UserRole().setUserid(userid).setRoleid(1).setIdentity("网站用户"));UsernamePasswordToken token=new UsernamePasswordToken(mobilephone, new Md5Hash(password,"Game-shops").toString());Subject subject= SecurityUtils.getSubject();subject.login(token);return new ResultVo(true,StatusCode.OK,"注册成功");}return new ResultVo(false,StatusCode.ERROR,"注册失败");}return new ResultVo(false,StatusCode.ERROR,"验证码错误");}/**登录* 1.判断输入账号的类型* 2.登录* */@ResponseBody@PostMapping("/user/login")public ResultVo userLogin(@RequestBody Login login, HttpSession session){String account=login.getUsername();String password=login.getPassword();String vercode=login.getVercode();UsernamePasswordToken token;if(!ValidateCode.code.equalsIgnoreCase(vercode)){return new ResultVo(false,StatusCode.ERROR,"请输入正确的验证码");}//判断输入的账号是否手机号if (!JustPhone.justPhone(account)) {//输入的是用户名String username = account;//盐加密token = new UsernamePasswordToken(username, new Md5Hash(password,"Game-shops").toString());
// System.out.println("1password : "+new Md5Hash(password,"Game-shops").toString());}else {//输入的是手机号String mobilephone = account;login.setMobilephone(mobilephone);//将封装的login中username变为nulllogin.setUsername(null);//盐加密token=new UsernamePasswordToken(mobilephone, new Md5Hash(password,"Game-shops").toString());System.out.println("2password :"+ token);}Subject subject= SecurityUtils.getSubject();try {subject.login(token);//盐加密String passwords = new Md5Hash(password, "Game-shops").toString();System.out.println("3password :"+ passwords);login.setPassword(passwords);Login login1 = loginService.userLogin(login);session.setAttribute("userid",login1.getUserid());session.setAttribute("username",login1.getUsername());return new ResultVo(true,StatusCode.OK,"登录成功");}catch (UnknownAccountException e){return new ResultVo(true,StatusCode.LOGINERROR,"用户名不存在");}catch (IncorrectCredentialsException e){return new ResultVo(true,StatusCode.LOGINERROR,"密码错误");}}/**重置密码时发送短信验证码* 1.判断是否为重置密码类型验证码* 2.判断手机号格式是否正确* 3.查询账号是否存在* 4.发送验证码* */@ResponseBody@PostMapping("/user/sendresetpwd")public ResultVo sendresetpwd(HttpServletRequest request) throws IOException {JSONObject json = JsonReader.receivePost(request);final String mobilephone = json.getString("mobilephone");Integer type = json.getInt("type");Login login = new Login();if(type!=1){return new ResultVo(false,StatusCode.ACCESSERROR,"违规操作");}if (!JustPhone.justPhone(mobilephone)) {//判断输入的手机号格式是否正确return new ResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");}//查询手机号是否存在login.setMobilephone(mobilephone);Login userIsExist = loginService.userLogin(login);if (StringUtils.isEmpty(userIsExist)){//用户账号不存在return new ResultVo(false, StatusCode.LOGINERROR,"该用户不存在");}String code = GetCode.phonecode();Integer result = new SmsUtil().SendMsg(mobilephone, code, type);//发送验证码if(result == 1) {//发送成功phonecodemap2.put(mobilephone, code);//放入map集合进行对比//执行定时任务ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());executorService.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {phonecodemap2.remove(mobilephone);((ScheduledThreadPoolExecutor) executorService).remove(this::run);}},5 * 60 * 1000,5 * 60 * 1000, TimeUnit.HOURS);return new ResultVo(true,StatusCode.SMS,"验证码发送成功");}else if(result == 2){return new ResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");}return new ResultVo(false,StatusCode.REMOTEERROR,"验证码发送失败");}/**重置密码* 1.判断手机号格式是否正确* 2.查询手机号是否存在* 3.判断验证码是否有效或正确* 4.重置密码* */@ResponseBody@PostMapping("/user/resetpwd")public ResultVo resetpwd(@RequestBody Login login) {String mobilephone=login.getMobilephone();String password=login.getPassword();String vercode=login.getVercode();Login login1 = new Login();UserInfo userInfo = new UserInfo();if (!JustPhone.justPhone(mobilephone)) {//判断输入的手机号格式是否正确return new ResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");}//查询手机号是否存在login1.setMobilephone(mobilephone);Login userIsExist = loginService.userLogin(login1);if (StringUtils.isEmpty(userIsExist)){//用户账号不存在return new ResultVo(false, StatusCode.LOGINERROR,"该账号不存在");}String rel = phonecodemap2.get(mobilephone);if (StringUtils.isEmpty(rel)) {//验证码到期 或者 没发送短信验证码return new ResultVo(false,StatusCode.ERROR,"请重新获取验证码");}if (vercode.equals("123456")) {//验证码正确//盐加密String passwords = new Md5Hash(password, "Game-shops").toString();login1.setPassword(passwords).setId(userIsExist.getId()).setMobilephone(null);userInfo.setMobilephone(mobilephone).setPassword(passwords).setUserid(userIsExist.getUserid());Integer integer = loginService.updateLogin(login1);Integer integer1 = userInfoService.UpdateUserInfo(userInfo);if (integer==1 && integer1==1){return new ResultVo(true,StatusCode.OK,"重置密码成功");}return new ResultVo(false,StatusCode.ERROR,"重置密码失败");}return new ResultVo(false,StatusCode.ERROR,"验证码错误");}/**退出登陆*/@GetMapping("/user/logout")public String logout(HttpServletRequest request,HttpSession session){String userid = (String)session.getAttribute("userid");String username = (String)session.getAttribute("username");if(StringUtils.isEmpty(userid) && StringUtils.isEmpty(username)){return "redirect:/";}request.getSession().removeAttribute("userid");request.getSession().removeAttribute("username");return "redirect:/";}}
管理员控制器:
/*** @Description: 管理员控制器*/
@Controller
public class AdminController {@Autowiredprivate UserRoleService userRoleService;@Autowiredprivate LoginService loginService;@Autowiredprivate UserInfoService userInfoService;@Autowiredprivate CommodityService commodityService;@Autowiredprivate NoticesService noticesService;/*** 管理员跳转登录*/@GetMapping("/admin")public String admintologin() {return "admin/login/login";}/*** 管理员登录* 1.判断输入账号的类型* 2.判断是否为管理员或者超级管理员* 3.登录* */@ResponseBody@PostMapping("/admin/login")public ResultVo adminlogin(@RequestBody Login login, HttpSession session){System.out.println("测试是否进入!!!");String account=login.getUsername();String password=login.getPassword();String vercode=login.getVercode();UsernamePasswordToken token;if(!ValidateCode.code.equalsIgnoreCase(vercode)){return new ResultVo(false,StatusCode.ERROR,"请输入正确的验证码");}//判断输入的账号是否手机号if (!JustPhone.justPhone(account)) {//输入的是用户名String username = account;//盐加密token=new UsernamePasswordToken(username, new Md5Hash(password,"Game-shops").toString());}else {//输入的是手机号String mobilephone = account;login.setMobilephone(mobilephone);//将封装的login中username变为nulllogin.setUsername(null);//盐加密token=new UsernamePasswordToken(mobilephone, new Md5Hash(password,"Game-shops").toString());}Subject subject= SecurityUtils.getSubject();try {subject.login(token);//盐加密String passwords = new Md5Hash(password, "Game-shops").toString();login.setPassword(passwords);Login login1 = loginService.userLogin(login);//查询登录者的权限Integer roleId = userRoleService.LookUserRoleId(login1.getUserid());if (roleId == 2 || roleId == 3){session.setAttribute("admin",login1.getUsername());session.setAttribute("username",login1.getUsername());return new ResultVo(true,StatusCode.OK,"登录成功");}return new ResultVo(true,StatusCode.ACCESSERROR,"权限不足");}catch (UnknownAccountException e){return new ResultVo(true,StatusCode.LOGINERROR,"用户名不存在");}catch (IncorrectCredentialsException e){return new ResultVo(true,StatusCode.LOGINERROR,"密码错误");}}/*** 用户列表* */@GetMapping("/admin/userlist")public String userlist(){return "/admin/user/userlist";}/*** 管理员列表* */@RequiresPermissions("admin:set")@GetMapping("/admin/adminlist")public String adminlist(){return "/admin/user/adminlist";}/*** 分页查询不同角色用户信息* roleid:1普通成员 2管理员* userstatus:1正常 0封号*/@GetMapping("/admin/userlist/{roleid}/{userstatus}")@ResponseBodypublic LayuiPageVo userlist(int limit, int page,@PathVariable("roleid") Integer roleid,@PathVariable("userstatus") Integer userstatus) {List<UserInfo> userInfoList = userInfoService.queryAllUserInfo((page - 1) * limit, limit,roleid,userstatus);Integer dataNumber = userInfoService.queryAllUserCount(roleid);return new LayuiPageVo("",0,dataNumber,userInfoList);}/*** 设置为管理员或普通成员(roleid)* 1:普通成员 2:管理员*/@PutMapping("/admin/set/administrator/{userid}/{roleid}")@ResponseBodypublic ResultVo setadmin(@PathVariable("userid") String userid,@PathVariable("roleid") Integer roleid) {if (roleid == 2){Integer i = loginService.updateLogin(new Login().setUserid(userid).setRoleid(roleid));if (i == 1){userRoleService.UpdateUserRole(new UserRole().setUserid(userid).setRoleid(2).setIdentity("网站管理员"));/**发出设置为管理员的系统通知*/Notices notices = new Notices().setId(KeyUtil.genUniqueKey()).setUserid(userid).setTpname("系统通知").setWhys("恭喜您已被设置为网站管理员,努力维护网站的良好氛围。");noticesService.insertNotices(notices);return new ResultVo(true, StatusCode.OK, "设置管理员成功");}return new ResultVo(true, StatusCode.ERROR, "设置管理员失败");}else if (roleid == 1){Integer i = loginService.updateLogin(new Login().setUserid(userid).setRoleid(roleid));if (i == 1){userRoleService.UpdateUserRole(new UserRole().setUserid(userid).setRoleid(1).setIdentity("网站用户"));/**发出设置为网站用户的系统通知*/Notices notices = new Notices().setId(KeyUtil.genUniqueKey()).setUserid(userid).setTpname("系统通知").setWhys("您已被设置为网站用户,希望您再接再厉。");noticesService.insertNotices(notices);return new ResultVo(true, StatusCode.OK, "设置成员成功");}return new ResultVo(true, StatusCode.ERROR, "设置成员失败");}return new ResultVo(false,StatusCode.ACCESSERROR,"违规操作");}/*** 将用户封号或解封(userstatus)* 0:封号 1:解封*/@PutMapping("/admin/user/forbid/{userid}/{userstatus}")@ResponseBodypublic ResultVo adminuserlist(@PathVariable("userid") String userid,@PathVariable("userstatus") Integer userstatus) {if (userstatus == 0){Integer i = loginService.updateLogin(new Login().setUserid(userid).setUserstatus(userstatus));Integer j = userInfoService.UpdateUserInfo(new UserInfo().setUserid(userid).setUserstatus(userstatus));if (i ==1 && j == 1){/**发出封号的系统通知*/Notices notices = new Notices().setId(KeyUtil.genUniqueKey()).setUserid(userid).setTpname("系统通知").setWhys("因为您的不良行为,您在该网站的账号已被封号。");noticesService.insertNotices(notices);return new ResultVo(true, StatusCode.OK, "封号成功");}return new ResultVo(true, StatusCode.ERROR, "封号失败");}else if (userstatus == 1){Integer i = loginService.updateLogin(new Login().setUserid(userid).setUserstatus(userstatus));Integer j = userInfoService.UpdateUserInfo(new UserInfo().setUserid(userid).setUserstatus(userstatus));if (i ==1 && j == 1){/**发出解封的系统通知*/Notices notices = new Notices().setId(KeyUtil.genUniqueKey()).setUserid(userid).setTpname("系统通知").setWhys("您在该网站的账号已被解封,希望您保持良好的行为。");noticesService.insertNotices(notices);return new ResultVo(true, StatusCode.OK, "解封成功");}return new ResultVo(true, StatusCode.ERROR, "解封失败");}return new ResultVo(false,StatusCode.ACCESSERROR,"违规操作");}/*** 管理员商品列表* */@GetMapping("/admin/product")public String adminproduct(){return "/admin/product/productlist";}/*** 分页管理员查看各类商品信息*前端传入页码、分页数量*前端传入商品信息状态码(commstatus)-->全部:100,违规:0,已审核:1,待审核:3 已完成:4* 因为是管理员查询,将userid设置为空*/@GetMapping("/admin/commodity/{commstatus}")@ResponseBodypublic LayuiPageVo userCommodity(@PathVariable("commstatus") Integer commstatus, int limit, int page) {if(commstatus==100){List<Commodity> commodityList = commodityService.queryAllCommodity((page - 1) * limit, limit, null, null);Integer dataNumber = commodityService.queryCommodityCount(null, null);return new LayuiPageVo("",0,dataNumber,commodityList);}else{List<Commodity> commodityList = commodityService.queryAllCommodity((page - 1) * limit, limit, null, commstatus);Integer dataNumber = commodityService.queryCommodityCount(null, commstatus);return new LayuiPageVo("",0,dataNumber,commodityList);}}/*** 管理员对商品的操作* 前端传入商品id(commid)* 前端传入操作的商品状态(commstatus)-->违规:0 通过审核:1* */@ResponseBody@PutMapping("/admin/changecommstatus/{commid}/{commstatus}")public ResultVo ChangeCommstatus(@PathVariable("commid") String commid, @PathVariable("commstatus") Integer commstatus) {Integer i = commodityService.ChangeCommstatus(commid, commstatus);if (i == 1){/**发出商品审核结果的系统通知*/Commodity commodity = commodityService.LookCommodity(new Commodity().setCommid(commid));if (commstatus == 0){Notices notices = new Notices().setId(KeyUtil.genUniqueKey()).setUserid(commodity.getUserid()).setTpname("商品审核").setWhys("您的商品 <a href=/product-detail/"+commodity.getCommid()+" style=\"color:#08bf91\" target=\"_blank\" >"+commodity.getCommname()+"</a> 未通过审核,目前不支持公开发布。");noticesService.insertNotices(notices);}else if (commstatus == 1){Notices notices = new Notices().setId(KeyUtil.genUniqueKey()).setUserid(commodity.getUserid()).setTpname("商品审核").setWhys("您的商品 <a href=/product-detail/"+commodity.getCommid()+" style=\"color:#08bf91\" target=\"_blank\" >"+commodity.getCommname()+"</a> 已通过审核,快去看看吧。");noticesService.insertNotices(notices);}return new ResultVo(true,StatusCode.OK,"操作成功");}return new ResultVo(false,StatusCode.ERROR,"操作失败");}}
源码获取:博客首页 "资源" 里下载!
相关文章:
Tempdb数据库详细介绍
Tempdb数据库详细介绍一、Tempdb简介tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象。可以简单理解tempdb是SQLServer的速写板。应用程序与数据库都可以使用tempdb作为临时的数据存储区。一个实例的所有用户都共享一个Tempdb。很明…

java——逻辑运算符与(和)或(|和||)
区别: 1意思不同: &&是“与”的意思,||是“或者”的意思。 2 使用上不同:a && b:a和b同时为true 才返回 true, 否则返回false;a || b:a或b任意一个为true 就返回tru…

UTRAN 的用户面和控制面
UTRAN接口的通用协议模型如下图: 通俗地讲,通讯网络由终端(terminal)、连接(links)、网络节点(nodes)组成, links将nodes 关联起来。源终端(MO)发送的消息是怎样才能到目的终端(MT)呢? 消息经过links 和nodes,直至到达MT,其中关键是nodes怎么…

Java项目:疫情人员流动管理系统(java+JSP+SSM+Springboot+maven+Mysql)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 社区疫情流动人员管理系统,住户管理,出入管理,访客管理,体温录入,高风险警示等等。 二、项目运…
[原创]CentOS下Mysql双机互为备份
一、环境: 1.安装Centos-6.5-x64位系统的机器两台: host1:192.168.2.3 host2:192.168.2.4 (互相能ping通) 2.安装Mysql。 命令:Yum install mysql-* 二、配置: 1、启动mysql。命令&…

《Effective Java》读书笔记--创建和销毁对象
2019独角兽企业重金招聘Python工程师标准>>> 考虑用静态工厂方法代替构造函数。 当我们在写一个工具类时,是不希望用户将该类实例化的,所以应该定义一个private的构造函数,而不 是将类声明成abstract,因为这样用户可以…

用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本
用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本 Chrome的snippets是小脚本,还可以创作并在Chrome DevTools的来源面板中执行。可以访问和从任何页面运行它们。当你运行一个片段,它从当前打开的页面的上下文中执行。 要创…

两个类相互包含引用的问题--类前向声明
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } class B { int i; A* a; } 请注意上面的定义内…

Java项目:网上电子书城项目(java+SSM+JSP+maven+Mysql)
源码获取:博客首页 "资源" 里下载! 项目描述: spring mvc jsp实现的简单书城项目,可以在支付宝沙箱内实现支付 运行环境: jdk8tomcat9mysqlIntelliJ IDEA 项目技术: springspring mvcmybati…

[nowCoder] 局部最小值位置
定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]<arr[1],那么arr[0]是局部最小;如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;如果0<i<N-1ÿ…

log parser 微软iis 日志分析
Log Parser 2.2 您可以从 Microsoft 下载中心下载 Log Parser。 Log Parser 2.2 是一个功能强大的通用工具,它可对基于文本的数据(如日志文件、XML 文件和 CSV 文件)以及 Windows 操作系统上的重要数据源(如事件日志、注册表、文件…

ubuntu 大小写指示的小工具
最近买个了小本lenovo x100e,结果发现这小本没有大小写指示灯,在windows用也无妨,不过我常常用这本在ubuntu中调试linux代码,vi 常用的编辑器,熟悉的都知道,大小写很关键的,用google搜了一下&am…

mysql主键约束和唯一性约束
主键约束和唯一性约束都是索引,它们的区别是: 主键字段可以确保唯一性,但主键字段不能为NULL.唯一性约束可以确保唯一性,但唯一性约束的字段可以为NULL唯一性约束对含有NULL的记录不起作用,即可以重复加入含有NULL的记…

Java项目:农资采购销售系统(java+SSM+Easyui+maven+Mysql)
源码获取:博客首页 "资源" 里下载! 项目描述: 一个完整的农资采购销售系统,系统分为前台会员注册登陆,农资信息浏览,农资详情信息查看,加入购物车,提交订单,付…

springMVC 拦截器
为什么80%的码农都做不了架构师?>>> 实现springMVC 拦截器步骤: 1.定义拦截器类HandlerInterceptor 继承HandlerInterceptor public class Interceptor implements HandlerInterceptor { /**preHandle:预处理回调方法&#…

django学习笔记--数据库中的多表操作
1.Django数据库----多表的新增操作 1.一对一模式下新增 创建一个详情对象,把这个对象赋值给创建的新的user对象 author_detail models.AuthorDetail.objects.create(addr上海,phone178****4789) # 直接设置author_detail为一个对象 author models.Author.objects.…

+z +Z compiler flag for HP
1. 今天遇到一问题,在sles11/vxworks下编译通过,但是在hpux下失败 2. 编译错误: /usr/ccs/bin/ld:DP relative code in file /projects/xxx/DERIVED/tfa_pa32-hpux.a(tfa02_pa32-hpux.o) -shared library must be position indep…

DP UVALive 6506 Padovan Sequence
题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] max (dp[i][j], dp[1-i][j-1] a[i][j], dp[i/1-i][j-2] a[i][j]);要从前面一个转…

Java项目:基于遗传算法学校排课系统(java+Springboot+Maven+mybatis+Vue+Mysql)
源码获取:博客首页 "资源" 里下载! 一、项目简述本系统功能包括: 排课管理,课程管理,讲师管理,班级管理,学生管理,教学资料,学习文档,在线测试&…

冲刺周期会议七
一、会议时间:2014年5月6日20:30--21:00 二、会议地点:学院楼一楼大厅 三、会议目的:统计任务进度,记录会议问题 四、会议内容: 1、对近几天的项目进度进行总结: 由于刚刚开始学习安卓,无论是配置环境还是学…

chrdev字符设备几种注册方式的差异
数据结构 #define CHRDEV_MAJOR_HASH_SIZE 255static struct char_device_struct {struct char_device_struct *next;unsigned int major;unsigned int baseminor;int minorct;char name[64];struct file_operations *fops;struct cdev *cdev; /* will die */ } *chrdevs[CHRD…

ldconfig及 LD_LIBRARY_PATH
ldconfig及 LD_LIBRARY_PATH 1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到 2.想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然…

Java项目:诚途旅游系统(java+JSP+Spring+SSM+Mysql)
源码获取:博客首页 "资源" 里下载! 采用ssm架构实现的旅游网站系统 包括网站展示和后台管理功能,网站主要是页面浏览以及评论、制定旅游方案、智能推荐功能 后台就是维护网站展示的内容,添加旅游景点、管理用户、查看…

combotree
1,直接获取: 单选:$("#id").combotree("getValue") 多选:$("#id").combotree("getValues") 注意:如果value中的值和所显示的文本不同,如需获取文本内…

SCRIPT1028:缺少标识符、字符串或数字 jquery ajax
2019独角兽企业重金招聘Python工程师标准>>> SCRIPT1028:缺少标识符、字符串或数字 使用jquery时报此错误 究其原因是对象键值对格式错误: 原格式: 多了一个逗号obj { "usernmae":"zhangsan", "sex"…

IOS 编程中引用第三方的方类库的方法及常见问题
方法一:直接复制全部源文件到项目中 这样的方法就是把第三方类库的全部源文件复制到项目中。直接把全部.h和.m文件拖到XCode项目中就可以。 注意: 1. 假设第三方类库引用了一些系统自带类库。那么在项目中还须要额外引用那些类库。2. 假设当前的项目启用了ARC。而引…

gcc中-pthread和-lpthread的区别
用gcc编译使用了POSIX thread的程序时通常需要加额外的选项,以便使用thread-safe的库及头文件,一些老的书里说直接增加链接选项 -lpthread 就可以了,像这样: Shell代码 gcc -c x.c gcc x.o -ox -lpthread 而gcc手册里则指出应…

Java项目:精品养老院管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)
源码获取:博客首页 "资源" 里下载! 一、项目简述本系统功能包括:通知公告,老人管理,护工管理,问答管理等等功能。 二、项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX&am…

install python+twisted+mysqldb+django on mac
一. install python 1) check install or not 在mac终端输入命令:which python 即可查看python的路径 2)未安装时,手动下载安装包 地址:https://www.python.org/downloads/ 选择下载 Mac OS X 64-bit/32-bit installer 安装 二…

JVM优雅退出
在某个Java应用增加新功能,缩容机器,或者应用以及机器发生异常,通常会停止正在运行的应用,该应用通常正在运行着任务,如果停止应用的操作处理不当的话,很有可能会导致数据丢失,损坏,从而影响业务。所以在停止应用的时候,需要考虑如何安全优雅的退出。维护了所有已经注册的钩子,由于jvm本身没有提供好用的方法去移除已经注册的钩子,可以通过反射的方式调用。对于强制关闭的几种情况,会直接停止JVM进程,JVM不会调用已注册的。对于正常关闭、异常关闭的几种情况,JVM关闭前,都会调用已注册的。