由于守望博客系统中支持由用户自己设置个人主页的URL的后半段,所以必须要用户设置该标识的功能,而且是用户注册登录之后自动弹出的页面,如果用户没有设置该标识,其它的操作是不能够操作的,同时要求主页标识只能设置一次。
  
  用户注册时只是填写了简单的登录信息,所以用户登录后,可以设置个人详细的信息,也即修改个人信息功能。
  
  1、设置主页标识功能
  
  由于在用户没有设置主页标识时,只要用户一登录就会自动跳转到设置主页标识页面,同时如果没有设置该标识,其它的操作是不能操作的,所以有一个拦截器来实现该功能,即:LoginInterceptor,主要代码如下:
  
  /**
  
  * 检查是否登录
  
  *
  
  * @author lzj
  
  * @since 1.0
  
  * @date [2019-05-07]
  
  */
  
  @Component
  
  public class LoginInterceptor extends HandlerInterceptorAdapter {
  
  @Override
  
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  
  HttpSession session = request.getSession();
  
  User user = (User) session.getAttribute(Const.SESSION_USER);
  
  String uri = request.getRequestURI();
  
  if (user == null) {
  
  // 说明没有登录,直接跳转到登录页面
  
  response.sendRedirect(request.getContextPath() + "/auth/login");
  
  return false;
  
  }
  
  if (StringUtils.isEmpty(user.getCode()) && !"/user/code".equals(uri)) {
  
  // 如果用户没有设置个人主页标识,则跳转到设置页面
  
  response.sendRedirect(request.getContextPath() + "/user/code");
  
  return false;
  
  }
  
  return true;
  
  }
  
  }
  
  有了拦截器类之后,还需要一个拦截器的配置类,即:InterceptorConfig,主要代码如下:
  
  /**
  
  * 拦截器配置类
  
  *
  
  * @author lzj
  
  * @since 1.0
  
  * @date [2019-05-07]
  
  */
  
  @Configuration
  
  public class InterceptorConfig implements WebMvcConfigurer {
  
  @Autowired
  
  private LoginInterceptor loginInterceptor;
  
  @Override
  
  public void addInterceptors(InterceptorRegistry registry) {
  
  registry.addInterceptor(loginInterceptor).addPathPatterns("/user/**");
  
  }
  
  }
  
  从上可知LoginInterceptor拦截器,是拦截“/user/**”形式的url链接。
  
  有了拦截器之后,可以实现该设置主页标识的功能,首先加载出修改个人主页标识页面核心代码如下:
  
  /**
  
  * 加载出修改个人主页标识页面
  
  *
  
  * @return
  
  */
  
  @RequestMapping(value = "/user/code", method = RequestMethod.GET)
  
  public String code(HttpSession session) {
  
  // session中的信息
  
  User user = (User) session.getAttribute(Const.SESSION_USER);
  
  if (!StringUtils.isEmpty(user.getCode())) {
  
  // 跳转到个人主页
  
  return "redirect:/u/" + user.getCode();
  
  }
  
  return Const.BASE_INDEX_PAGE + "auth/user/code";
  
  }
  
  页面效果如下:
  
  保存主页标识信息的后台核心代码如下:
  
  /**
  
  * 保存主页标识信息
  
  *
  
  * @param request
  
  * @param session
  
  * @return
  
  */
  
  @RequestMapping(value = "/user/code", method = RequestMethod.POST)
  
  @ResponseBody
  
  public Result code(HttpServletRequest request, HttpSession session) {
  
  Result result = new Result(www.chaoyuepint.com);
  
  try {
  
  // 接收参数
  
  String code = request.getParameter("code");
  
  // 校验参数
  
  if (StringUtils.isEmpty(code)) {
  
  throw new TipException("主页标识不能为空");
  
  }
  
  if (!StringUtil.isId(code)www.yifayule2d.com) {
  
  throw new TipException("主页标识只能包含字母、数字和下划线");
  
  }
  
  // session中的信息
  
  User user = (User) session.getAttribute(Const.SESSION_USER);
  
  if (!StringUtils.isEmpty(user.getCode(www.yifa5yl.com))) {
  
  throw new TipException("主页标识只能设置一次");
  
  }
  
  // 设置主页标识
  
  user.setCode(code);
  
  userService.updateById(www.zzhehong.com user);
  
  // 更新session
  
  session.removeAttribute(Const.SESSION_USER);
  
  session.setAttribute(Const.SESSION_USER, user);
  
  result.setCode(Result.CODE_SUCCESS);
  
  result.setMsg("修改成功");
  
  result.setContent(code);
  
  } catch (TipException e) {
  
  result.setCode(Result.CODE_EXCEPTION);
  
  result.setMsg(e.getMessage());
  
  } catch (Exception e) {
  
  log.error("保存主页标识信息失败", e);
  
  result.setCode(Result.CODE_EXCEPTION);
  
  result.setMsg("保存主页标识信息失败");
  
  }
  
  return result;
  
  }
  
  2、修改个人信息功能
  
  修改个人信息主要是提供用户填写个人详细信息的,加载出修改个人信息页面的后台核心代码如下:
  
  /**
  
  * 加载出修改个人信息页面
  
  *
  
  * @param session
  
  * @return
  
  */
  
  @RequestMapping(value =www.whonylpt.com/ "/user/edit", method = RequestMethod.GET)
  
  public String edit(HttpSession session, Model model) {
  
  // session中的信息
  
  User sessionUser = (User) session.getAttribute(Const.SESSION_USER);
  
  // 从数据库中获取用户信息
  
  User user = userService.getById(sessionUser.getUserId());
  
  model.addAttribute("user", user);
  
  return Const.BASE_INDEX_PAGE + "auth/user/edit";
  
  }
  
  页面效果如下:
  
  保存修改信息的后台核心代码如下:
  
  /**
  
  * 修改个人信息
  
  *
  
  * @param request
  
  * @param session
  
  * @return
  
  */
  
  @RequestMapping(value = "/user/edit", method = RequestMethod.POST)
  
  @ResponseBody
  
  public Result edit(HttpServletRequest request, HttpSession session) {
  
  Result result = new Result(www.cjyl1yule.com);
  
  try {
  
  // 获取登录信息
  
  User tempUser = (User) session.getAttribute(Const.SESSION_USER);
  
  String userId = tempUser.getUserId();
  
  // 接收参数
  
  String realName = request.getParameter("realName");
  
  String cellphone = request.getParameter("cellphone");
  
  String sexStr = request.getParameter(www.chaoyueylgw.com"sex");
  
  String introduce = request.getParameter("introduce");
  
  if (StringUtils.isEmpty(realName) || StringUtils.isEmpty(cellphone) || StringUtils.isEmpty(sexStr) || StringUtils.isEmpty(introduce)) {
  
  throw new TipException("缺少必要请求参数");
  
  }
  
  // 校验性别
  
  int sex = User.SEX_SECRET;
  
  try {
  
  sex = Integer.parseInt(sexStr);
  
  if (User.SEX_FEMALE != sex && User.SEX_MALE != sex && User.SEX_SECRET != sex) {
  
  throw new Exception();
  
  }
  
  } catch (Exception e) {
  
  throw new TipException("性别数据不符合规则");
  
  }
  
  // 获取用户的信息
  
  User user = userService.getById(userId);
  
  user.setRealName(realName);
  
  user.setCellphone(cellphone);
  
  user.setSex(sex);
  
  user.setIntroduce(introduce);
  
  // 更新用户的信息
  
  boolean flag = userService.updateById(user);
  
  if (!flag) {
  
  throw new TipException("修改个人信息失败");
  
  }
  
  result.setCode(Result.CODE_SUCCESS);
  
  result.setMsg("修改成功");
  
  } catch (TipException e) {
  
  result.setCode(Result.CODE_EXCEPTION);
  
  result.setMsg(e.getMessage());
  
  } catch (Exception e) {
  
  log.error("修改个人信息失败", e);
  
  result.setCode(Result.CODE_EXCEPTION);
  
  result.setMsg("修改个人信息失败");
  
  }
  
  return result;
  
  }

转载于:https://my.oschina.net/u/3386278/blog/3070975

基于SpringBoot从零构建博客网站 - 开发设置主页标识和修改个人信息功能相关推荐

  1. 基于SpringBoot从零构建博客网站 - 整合ehcache和开发注册登录功能

    对于程序中一些字典信息.配置信息应该在程序启动时加载到缓存中,用时先到缓存中取,如果没有命中,再到数据库中获取同时放到缓存中,这样做可以减轻数据库层的压力.目前暂时先整合ehcache缓存,同时预留了 ...

  2. springboot分页展示功能_基于SpringBoot从零构建博客网站 - 分页显示文章列表功能...

    显示文章列表一般都是采用分页显示,比如每页10篇文章显示.这样就不用每次就将所有的文章查询出来,而且当文章数量特别多的时候,如果一次性查询出来很容易出现OOM异常. 后台的分页插件采用的是mybati ...

  3. 基于springboot + vue 的个人博客搭建过程(续)

    承接上文:基于springboot + vue 的个人博客搭建过程 目录 1. 评论列表 1.1 接口说明 1.2 controller 1.3 service 1.4 mapper 1.5 实体类 ...

  4. 基于springboot搭建的个人博客系统

    源码下载地址:blog blog是基于springboot搭建的个人博客,响应式 前端技术:html.css.js.jq.bootstrap 后台技术:springboot.thymeleaf.myb ...

  5. 基于springboot + vue 的个人博客搭建过程(上线)

    承接上文: 基于springboot + vue 的个人博客搭建过程(续) 目录 1. 搭建环境 1. 安装docker 2. 拉取并运行 2.1 拉取服务 2.2 部署运行mysql 2.3 部署运 ...

  6. 基于Java/Mysql的个人博客网站

    3年前写的一个技术博客...纪念一下. OpenIdea Blog - 开源灵感博客 a personal blog site based on Java/Mysql - 基于Java/Mysql的个 ...

  7. SpringBoot之从零搭建博客网站

    前言 为什么想要搭建这个博客? 程序员从业8年,期间学过一些东西,用过一些东西,然后遗忘,然后再次翻书,周而复始,少有总结的时候. 少时学编程,有时颇有趣味.有所悟.有所得.豁然开朗.别有洞天的感觉, ...

  8. SpringBoot之从零搭建博客网站(可提供源码)

    文字不够,图片来凑. 前言 为什么想要搭建这个博客? 我还记得,在大二寒假的某天,同往常一样的在家解决这某个bug,不停地问度娘,很巧的碰到了一个同行在他的博客中完美的记录了我的bug的解决方案,随后 ...

  9. 阿星Plus:基于abp vNext开源一个博客网站

    作为微软最早迈向开源的重要软件之一,.NET 5的发布具有重要意义! 微软希望 .NET Framework 开发者能够迁移他们的代码和应用到 .NET 5.0 上,为明年发布的 .NET 6.0 将 ...

最新文章

  1. SAP RETAIL 补货类型RF之初探 II
  2. 为修复一个代码执行安全漏洞,TensorFlow决定不再支持YAML
  3. 1.13编程基础之综合应用 45 十进制到八进制 python
  4. 打开计算机属性的命令,电脑双击打开的是属性怎么办
  5. 网络编程 之osi七层协议
  6. 概率论与数理统计——贝塞尔校正(Bessel‘s Correction)
  7. 使得电脑成为通用计算机器,为什么电脑显示器变成通用非即插即用监视器?
  8. php实现商城评论,谁能写一个thinkphp 商城购物评论回复能例子?
  9. wz框架登录功能详解——demo1
  10. 世界上第一次网络瘫痪 | 历史上的今天
  11. Spring-Aop及jdbc总结
  12. 您需要计算机管理员权限,计算机中出现“你需要计算机管理员提供的权限才能对此文件进行更改”错误的解决方法...
  13. dns被劫持有什么现象?DNS是什么 dns被劫持了如何解决
  14. C/C++动态内存开辟详解(含常见错误以及经典面试题)
  15. python代码怎么修改_python修改微信和支付宝步数的示例代码
  16. 斐讯n1遥控器app——蓝牙篇
  17. 淘宝API接入说明(商品详情数据示例)
  18. 【Web技术】1274- 深入浅出前端监控
  19. 陈峰/何雪松/陈宁客座主编Frontiers口腔微生物组学专刊征稿(IF6)
  20. winform 三层(BLL.DAL.MODEL)

热门文章

  1. PMP证书的含金量主要体现在这四个方面
  2. 价值100亿美金的胸罩生意
  3. path('int:question_id/vote/', views.vote, name='vote')中的int:question_id的含义
  4. C语言-吃鱼还是吃肉-PTA
  5. dota2 服务器尚未更新到最新版本,教程:DOTA2更新后仍提示版本过低怎么办?
  6. html中video标签用法,HTML中的video标签怎么用
  7. android 关闭神隐模式,怎么回事,关闭神隐模式反而更省电
  8. python做生日祝福短信_适合生日发的朋友圈文案有哪些 独特又有趣的生日祝福句子...
  9. Python 爬虫获取 URP 教务系统学籍信息,你的信息 正暴露在 互联网中!
  10. tim输入密码后没有反应怎么办