文档章节

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

SEOwhywhy
 SEOwhywhy
发布于 07/08 13:35
字数 1165
阅读 29
收藏 3

  由于守望博客系统中支持由用户自己设置个人主页的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;
  
  }

© 著作权归作者所有

SEOwhywhy
粉丝 8
博文 152
码字总数 335019
作品 0
私信 提问
springboot docker jenkins 部署 对比 tomcat

---------------------------------------------------------------------------------------------------------------- springboot 详解 (一) helloworld 下载demo springboot 详解 (二)......

curiousby
2018/06/26
0
0
Spring boot Mybatis 整合(完整版)

个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页、个人作品、个人博客) 朋友自制的springboot接口文档组件swagger2 更多干货 SpringBoot系列目录...

舒运
2018/07/09
366
0
SpringBoot | 第一章:第一个SpringBoot应用

SpringBoot | 第一章:第一个SpringBoot应用 springboot简单介绍 概述 随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的...

oKong
2018/07/15
2.2K
1
搭建自己的Spring Initializr服务器

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/51713174 搭建自己的Spring Initializr服务器 作者:chszs,未经博主允许不得转...

chszs
2016/06/19
0
0
Docker下ELK三部曲之二:细说开发

本章是《Docker下ELK三部曲》的第二篇,之前的《Docker下ELK三部曲之一:极速体验》部署了ELK,还有一个web应用可以将日志上报到ELK,然后在Kibana提供的页面查询到了日志,今天我们一起深入...

boling_cavalry
2018/04/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
52分钟前
2
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
今天
7
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
7
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
1
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部