因爲守望博客系統中支持由用戶本身設置我的主頁的URL的後半段,因此必需要用戶設置該標識的功能,並且是用戶註冊登陸以後自動彈出的頁面,若是用戶沒有設置該標識,其它的操做是不可以操做的,同時要求主頁標識只能設置一次。數據庫
用戶註冊時只是填寫了簡單的登陸信息,因此用戶登陸後,能夠設置我的詳細的信息,也即修改我的信息功能。微信
因爲在用戶沒有設置主頁標識時,只要用戶一登陸就會自動跳轉到設置主頁標識頁面,同時若是沒有設置該標識,其它的操做是不能操做的,因此有一個攔截器來實現該功能,即:LoginInterceptor,主要代碼以下:session
/** * 檢查是否登陸 * * @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,主要代碼以下:app
/** * 攔截器配置類 * * @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連接。ide
有了攔截器以後,能夠實現該設置主頁標識的功能,首先加載出修改我的主頁標識頁面核心代碼以下: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"; }
頁面效果以下:code
保存主頁標識信息的後臺核心代碼以下:blog
/** * 保存主頁標識信息 * * @param request * @param session * @return */ @RequestMapping(value = "/user/code", method = RequestMethod.POST) @ResponseBody public Result code(HttpServletRequest request, HttpSession session) { Result result = new Result(); try { // 接收參數 String code = request.getParameter("code"); // 校驗參數 if (StringUtils.isEmpty(code)) { throw new TipException("主頁標識不能爲空"); } if (!StringUtil.isId(code)) { throw new TipException("主頁標識只能包含字母、數字和下劃線"); } // session中的信息 User user = (User) session.getAttribute(Const.SESSION_USER); if (!StringUtils.isEmpty(user.getCode())) { throw new TipException("主頁標識只能設置一次"); } // 設置主頁標識 user.setCode(code); userService.updateById(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; }
修改我的信息主要是提供用戶填寫我的詳細信息的,加載出修改我的信息頁面的後臺核心代碼以下:ip
/** * 加載出修改我的信息頁面 * * @param session * @return */ @RequestMapping(value = "/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"; }
頁面效果以下:rem
保存修改信息的後臺核心代碼以下:
/** * 修改我的信息 * * @param request * @param session * @return */ @RequestMapping(value = "/user/edit", method = RequestMethod.POST) @ResponseBody public Result edit(HttpServletRequest request, HttpSession session) { Result result = new Result(); 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("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; }
以你最方便的方式關注我:
微信公衆號: