基於SpringBoot從零構建博客網站

由於守望博客系統中支持由用戶自己設置個人主頁的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;
}


分享到:


相關文章: