基於SpringBoot從零構建博客網站 - 開發設置主頁標識和修改我的信息功能

  因爲守望博客系統中支持由用戶本身設置我的主頁的URL的後半段,因此必需要用戶設置該標識的功能,並且是用戶註冊登陸以後自動彈出的頁面,若是用戶沒有設置該標識,其它的操做是不可以操做的,同時要求主頁標識只能設置一次。
  
  用戶註冊時只是填寫了簡單的登陸信息,因此用戶登陸後,能夠設置我的詳細的信息,也即修改我的信息功能。
  
  一、設置主頁標識功能
  
  因爲在用戶沒有設置主頁標識時,只要用戶一登陸就會自動跳轉到設置主頁標識頁面,同時若是沒有設置該標識,其它的操做是不能操做的,因此有一個攔截器來實現該功能,即: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;
  
  }
  
  二、修改我的信息功能
  
  修改我的信息主要是提供用戶填寫我的詳細信息的,加載出修改我的信息頁面的後臺核心代碼以下:
  
  /**
  
  * 加載出修改我的信息頁面
  
  *
  
  * @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;
  
  }數據庫

相關文章
相關標籤/搜索