基於SpringBoot從零構建部落格網站 - 開發設定主頁標識和修改個人資訊功能

架構與我發表於2019-07-08

由於守望部落格系統中支援由使用者自己設定個人主頁的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";
}

頁面效果如下:

基於SpringBoot從零構建部落格網站 - 開發設定主頁標識和修改個人資訊功能

儲存主頁標識資訊的後臺核心程式碼如下:

/**
 * 儲存主頁標識資訊
 *
 * @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;
}

2、修改個人資訊功能

修改個人資訊主要是提供使用者填寫個人詳細資訊的,載入出修改個人資訊頁面的後臺核心程式碼如下:

/**
 * 載入出修改個人資訊頁面
 *
 * @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";
}

頁面效果如下:

基於SpringBoot從零構建部落格網站 - 開發設定主頁標識和修改個人資訊功能

儲存修改資訊的後臺核心程式碼如下:

/**
 * 修改個人資訊
 *
 * @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;
}

關注我

以你最方便的方式關注我:
微信公眾號:
基於SpringBoot從零構建部落格網站 - 開發設定主頁標識和修改個人資訊功能

相關文章