shenxianbao_branch
sxb 10 months ago
parent ae3ef7f220
commit e4962d3feb

@ -36,39 +36,42 @@ import com.wsk.tool.Pornographic;*/
@Slf4j
public class UserController {
// 使用@Resource注解注入UserInformationService用于处理用户信息相关业务逻辑由Spring框架自动装配
// 使用@Resource注解注入UserInformationService用于处理用户信息相关业务逻辑,比如查询、更新用户的基本信息等操作,由Spring框架自动装配对应的实现类。
@Resource
private UserInformationService userInformationService;
// 使用@Resource注解注入UserPasswordService用于处理用户密码相关业务逻辑由Spring框架自动装配
@Resource
private UserPasswordService userPasswordService;
// 使用@Resource注解注入UserCollectionService用于处理用户收藏相关业务逻辑由Spring框架自动装配
// 使用@Resource注解注入UserCollectionService用于处理用户收藏相关的业务逻辑像添加、删除用户的收藏记录等操作由Spring框架自动装配对应的实现类。
@Resource
private UserCollectionService userCollectionService;
// 使用@Resource注解注入UserReleaseService用于处理用户发布相关业务逻辑从变量名推测具体需看业务由Spring框架自动装配
// 使用@Resource注解注入UserReleaseService从变量名推测可能用于处理用户发布相关的业务逻辑具体需看业务实现例如用户发布商品、发布动态等操作由Spring框架自动装配对应的实现类。
@Resource
private UserReleaseService userReleaseService;
// 使用@Resource注解注入BoughtShopService用于处理用户购买店铺相关业务逻辑(从变量名推测,具体需看业务由Spring框架自动装配
// 使用@Resource注解注入BoughtShopService从变量名推测可能用于处理用户购买店铺相关业务逻辑(具体需看业务实现比如记录用户购买店铺的信息、查询已购买店铺列表等操作,由Spring框架自动装配对应的实现类。
@Resource
private BoughtShopService boughtShopService;
// 使用@Resource注解注入UserWantService用于处理用户求购相关业务逻辑由Spring框架自动装配
// 使用@Resource注解注入UserWantService用于处理用户求购相关业务逻辑,例如用户发布求购信息、查询自己的求购记录等操作,由Spring框架自动装配对应的实现类。
@Resource
private UserWantService userWantService;
// 使用@Resource注解注入ShopCarService用于处理购物车相关业务逻辑(从变量名推测,具体需看业务由Spring框架自动装配
// 使用@Resource注解注入ShopCarService从变量名推测可能用于处理购物车相关业务逻辑(具体需看业务实现像添加商品到购物车、修改购物车中商品数量等操作,由Spring框架自动装配对应的实现类。
@Resource
private ShopCarService shopCarService;
// 使用@Resource注解注入OrderFormService用于处理订单表单相关业务逻辑由Spring框架自动装配
// 使用@Resource注解注入OrderFormService用于处理订单表单相关业务逻辑,比如创建订单、查询订单状态等操作,由Spring框架自动装配对应的实现类。
@Resource
private OrderFormService orderFormService;
// 使用@Resource注解注入GoodsOfOrderFormService用于处理订单表单中商品相关业务逻辑(从变量名推测,具体需看业务由Spring框架自动装配
// 使用@Resource注解注入GoodsOfOrderFormService从变量名推测可能用于处理订单表单中商品相关业务逻辑(具体需看业务实现例如查看订单中包含的商品详情、修改订单商品数量等操作,由Spring框架自动装配对应的实现类。
@Resource
private GoodsOfOrderFormService goodsOfOrderFormService;
// 使用@Resource注解注入UserStateService用于处理用户状态相关业务逻辑(从变量名推测,具体需看业务由Spring框架自动装配
// 使用@Resource注解注入UserStateService从变量名推测可能用于处理用户状态相关业务逻辑(具体需看业务实现比如设置用户的在线、离线状态,或者判断用户是否被封禁等状态相关操作,由Spring框架自动装配对应的实现类。
@Resource
private UserStateService userStateService;
// 使用@Resource注解注入ShopInformationService用于处理店铺信息相关业务逻辑由Spring框架自动装配
// 使用@Resource注解注入ShopInformationService用于处理店铺信息相关业务逻辑,例如查询店铺详情、更新店铺信息等操作,由Spring框架自动装配对应的实现类。
@Resource
private ShopInformationService shopInformationService;
// 使用@Resource注解注入GoodsCarService从变量名推测可能用于处理商品车可能类似购物车具体看业务相关的业务逻辑像管理商品车中的商品等操作由Spring框架自动装配对应的实现类。
// 使用@Resource注解注入GoodsCarService用于处理商品车可能类似购物车具体看业务相关业务逻辑由Spring框架自动装配
@Resource
private GoodsCarService goodsCarService;
@ -119,105 +122,76 @@ public class UserController {
return "redirect:/";
}
// 用户注册方法使用POST方法访问/registered.do路径时触发该方法
// 接收用户注册相关信息,先插入用户基本信息,再插入密码信息等,根据操作结果返回相应提示信息
//用户注册,拥有插入数据而已,没什么用的
@RequestMapping(value = "/registered.do", method = RequestMethod.POST)
public String registered(Model model,
@RequestParam String name, @RequestParam String phone, @RequestParam String password) {
// 创建一个UserInformation对象用于封装要插入的用户基本信息
UserInformation userInformation = new UserInformation();
// 设置用户名,将前端传入的用户名赋值给用户信息对象
userInformation.setUsername(name);
// 设置用户手机号,将前端传入的手机号赋值给用户信息对象
userInformation.setPhone(phone);
// 设置用户信息的修改时间为当前时间,通常用于记录数据的更新时间等业务逻辑
userInformation.setModified(new Date());
// 设置用户信息的创建时间为当前时间,记录用户注册的时间
userInformation.setCreatetime(new Date());
// 调用userInformationService的insertSelective方法插入用户基本信息根据返回结果判断插入是否成功若返回1表示插入成功
if (userInformationService.insertSelective(userInformation) == 1) {
// 如果用户基本信息插入成功通过手机号查询该用户的ID用于后续关联密码等信息
int uid = userInformationService.selectIdByPhone(phone);
// 创建一个UserPassword对象用于封装用户密码相关信息
UserPassword userPassword = new UserPassword();
// 设置用户密码的修改时间为当前时间
userPassword.setModified(new Date());
// 对用户传入的密码进行MD5加密通过StringUtils工具类的实例方法提高密码安全性然后设置到密码对象中
password = StringUtils.getInstance().getMD5(password);
userPassword.setPassword(password);
// 设置用户密码对应的用户ID关联到刚插入的用户基本信息记录
userPassword.setUid(uid);
// 调用userPasswordService的insertSelective方法插入用户密码信息插入结果保存到result变量中
int result = userPasswordService.insertSelective(userPassword);
// 如果插入用户密码信息失败,将"fail"结果添加到Model中并返回"success"视图(这里视图名可能不太准确,具体看业务逻辑对应的页面)
if (result!= 1) {
if (result != 1) {
model.addAttribute("result", "fail");
return "success";
}
// 如果用户密码插入成功,将"success"结果添加到Model中并返回"success"视图
model.addAttribute("result", "success");
return "success";
}
// 如果用户基本信息插入失败,将"fail"结果添加到Model中并返回"success"视图
model.addAttribute("result", "fail");
return "success";
}
// 以下是另一个用户注册的方法,被注释掉了,可能是之前的实现或者备用的逻辑,暂时未启用
// 该方法使用GET方法访问/registered路径时触发直接返回注册页面的视图名称这里假设视图名称就是"registered",具体看业务配置)
// @RequestMapping(value = "/registered", method = RequestMethod.GET)
// public String registered() {
// return "registered";
// }
//用户注册
// @RequestMapping(value = "/registered", method = RequestMethod.GET)
// public String registered() {
// return "registered";
// }
// 处理验证登录的请求使用POST方法访问/login.do路径时触发该方法与GET方法访问/login.do路径的处理逻辑不同是另一个重载方法
// 根据传入的手机号、密码、token等信息验证用户登录是否合法根据验证结果进行相应的重定向操作
//验证登录
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public String login(HttpServletRequest request,
@RequestParam String phone, @RequestParam String password, @RequestParam String token) {
// 从session中获取之前在登录界面GET方法的/login.do逻辑中设置的生成的token用于和本次传入的token对比防止重复提交等情况
String loginToken = (String) request.getSession().getAttribute("token");
// 如果传入的手机号或者密码为空,直接重定向到登录页面,让用户重新输入
if (StringUtils.getInstance().isNullOrEmpty(phone) || StringUtils.getInstance().isNullOrEmpty(password)) {
return "redirect:/login.do";
}
// 防止重复提交如果传入的token为空或者与session中的token不一致重定向到登录页面
if (StringUtils.getInstance().isNullOrEmpty(token) ||!token.equals(loginToken)) {
//防止重复提交
if (StringUtils.getInstance().isNullOrEmpty(token) || !token.equals(loginToken)) {
return "redirect:/login.do";
}
// 调用getId方法原代码中未显示该方法具体实现推测是验证手机号和密码是否匹配等逻辑并获取用户相关信息根据返回结果判断验证情况
boolean b = getId(phone, password, request);
// 如果验证失败,不存在该手机号码对应的用户,重定向到登录页面并带上错误提示信息
//失败,不存在该手机号码
if (!b) {
return "redirect:/login.do?msg=不存在该手机号码";
}
// 如果验证成功,重定向到根路径(通常是网站首页,具体看项目配置)
return "redirect:/";
}
// 处理查看用户基本信息的请求,访问/personal_info.do路径时触发该方法
// 从session中获取用户信息若存在则生成新的token并设置到session和model中然后返回用户基本信息页面的视图名称
//查看用户基本信息
@RequestMapping(value = "/personal_info.do")
public String personalInfo(HttpServletRequest request, Model model) {
// 从session中获取用户信息对象如果获取到的对象为空说明用户未登录重定向到登录页面
UserInformation userInformation = (UserInformation) request.getSession().getAttribute("userInformation");
if (StringUtils.getInstance().isNullOrEmpty(userInformation)) {
return "redirect:/login.do";
}
// 生成一个新的token用于本次查看用户基本信息操作的相关验证等具体看业务
String personalInfoToken = TokenProccessor.getInstance().makeToken();
// 将新生成的token设置到HttpServletRequest的session中
request.getSession().setAttribute("personalInfoToken", personalInfoToken);
// 将token添加到Model中方便在前端页面使用可能用于页面数据验证等操作
model.addAttribute("token", personalInfoToken);
// 将用户信息对象添加到Model中方便在前端页面展示用户的基本信息
model.addAttribute("userInformation", userInformation);
// 返回用户基本信息页面的视图名称,视图解析器会根据这个名称找到对应的页面进行渲染显示
return "page/personal/personal_info";
}
// 处理完善用户基本信息认证的请求使用POST方法访问/certification.do路径时触发该方法
// 接收用户提交的各种基本信息进行格式校验等操作后更新用户信息根据更新结果返回相应的提示信息封装在Map中
//完善用户基本信息,认证
@RequestMapping(value = "/certification.do", method = RequestMethod.POST)
@ResponseBody
public Map certification(HttpServletRequest request,
@ -226,72 +200,63 @@ public class UserController {
@RequestParam(required = false) String clazz, @RequestParam String token,
@RequestParam(required = false) String sno, @RequestParam(required = false) String dormitory,
@RequestParam(required = false) String gender) {
// 从session中获取用户信息对象如果为空说明用户未登录直接返回默认的提示信息result为0的Map
UserInformation userInformation = (UserInformation) request.getSession().getAttribute("userInformation");
Map<String, Integer> map = new HashMap<>();
map.put("result", 0);
//该用户还没有登录
if (StringUtils.getInstance().isNullOrEmpty(userInformation)) {
return map;
}
// 从session中获取之前在查看用户基本信息操作中设置的personalInfoToken用于防止重复提交等验证
String certificationToken = (String) request.getSession().getAttribute("personalInfoToken");
// 防止重复提交如果获取到的certificationToken为空直接返回默认的提示信息result为0的Map
//防止重复提交
// boolean b = token.equals(certificationToken);
if (StringUtils.getInstance().isNullOrEmpty(certificationToken)) {
return map;
} else {
// 如果验证通过移除session中的certificationToken避免重复使用
request.getSession().removeAttribute("certificationToken");
}
// 如果传入的用户名不为空且长度小于25对用户名进行空格替换等格式化操作通过StringUtils工具类然后设置到用户信息对象中
if (userName!= null && userName.length() < 25) {
if (userName != null && userName.length() < 25) {
userName = StringUtils.getInstance().replaceBlank(userName);
userInformation.setUsername(userName);
} else if (userName!= null && userName.length() >= 25) {
// 如果用户名长度大于等于25不符合要求直接返回默认的提示信息result为0的Map
} else if (userName != null && userName.length() >= 25) {
return map;
}
// 与处理用户名类似,对真实姓名进行格式校验和设置操作,如果不符合要求则返回默认提示信息
if (realName!= null && realName.length() < 25) {
if (realName != null && realName.length() < 25) {
realName = StringUtils.getInstance().replaceBlank(realName);
userInformation.setRealname(realName);
} else if (realName!= null && realName.length() >= 25) {
} else if (realName != null && realName.length() >= 25) {
return map;
}
// 对班级信息进行格式校验和设置操作,如果不符合要求则返回默认提示信息
if (clazz!= null && clazz.length() < 25) {
if (clazz != null && clazz.length() < 25) {
clazz = StringUtils.getInstance().replaceBlank(clazz);
userInformation.setClazz(clazz);
} else if (clazz!= null && clazz.length() >= 25) {
} else if (clazz != null && clazz.length() >= 25) {
return map;
}
// 对学号信息进行格式校验和设置操作,如果不符合要求则返回默认提示信息
if (sno!= null && sno.length() < 25) {
if (sno != null && sno.length() < 25) {
sno = StringUtils.getInstance().replaceBlank(sno);
userInformation.setSno(sno);
} else if (sno!= null && sno.length() >= 25) {
} else if (sno != null && sno.length() >= 25) {
return map;
}
// 对宿舍信息进行格式校验和设置操作,如果不符合要求则返回默认提示信息
if (dormitory!= null && dormitory.length() < 25) {
if (dormitory != null && dormitory.length() < 25) {
dormitory = StringUtils.getInstance().replaceBlank(dormitory);
userInformation.setDormitory(dormitory);
} else if (dormitory!= null && dormitory.length() >= 25) {
} else if (dormitory != null && dormitory.length() >= 25) {
return map;
}
// 对性别信息进行格式校验和设置操作,如果不符合要求则返回默认提示信息
if (gender!= null && gender.length() <= 2) {
if (gender != null && gender.length() <= 2) {
gender = StringUtils.getInstance().replaceBlank(gender);
userInformation.setGender(gender);
} else if (gender!= null && gender.length() > 2) {
} else if (gender != null && gender.length() > 2) {
return map;
}
// 调用userInformationService的updateByPrimaryKeySelective方法更新用户信息根据返回结果判断更新是否成功
int result = userInformationService.updateByPrimaryKeySelective(userInformation);
if (result!= 1) {
// 如果更新失败,直接返回默认的提示信息result为0的Map代表认证失败
if (result != 1) {
//更新失败,认证失败
return map;
}
// 如果更新成功,说明认证成功将更新后的用户信息重新设置到session中然后更新提示信息的result为1表示成功
//认证成功
request.getSession().setAttribute("userInformation", userInformation);
map.put("result", 1);
return map;

@ -13,6 +13,7 @@
*/
// 立即执行函数依据不同环境导出jQuery模块接收全局对象和工厂函数作为参数
// 立即执行函数依据不同环境导出jQuery模块.接收全局对象和工厂函数作为参数
(function( global, factory ) {
// 判断是否为CommonJS环境如Node.js
if ( typeof module === "object" && typeof module.exports === "object" ) {

Loading…
Cancel
Save