package com.uas.kanban.controller; import com.alibaba.fastjson.JSONObject; import com.uas.kanban.annotation.NotEmpty; import com.uas.kanban.base.BaseController; import com.uas.kanban.exception.OperationException; import com.uas.kanban.model.RememberKey; import com.uas.kanban.model.User; import com.uas.kanban.service.RememberKeyService; import com.uas.kanban.service.UserService; import com.uas.kanban.support.SessionHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * 用户 * * @author sunyj * @since 2017年9月1日 下午4:42:10 */ @Controller @RequestMapping("/user") public class UserController extends BaseController { @Autowired private UserService userService; @Autowired private RememberKeyService rememberKeyService; @Autowired private SessionHelper sessionHelper; /** * 登陆 * * @param name 名称 * @param password 密码 * @param request request * @param response response * @return 登陆信息 * * * * * * * * * * * * * * * * * * * * * *
KeyValue
code用户 code
name用户名称
role用户角色
key生成的 key
*/ @RequestMapping("/login") @ResponseBody public Map login(@NotEmpty("name") String name, @NotEmpty("password") String password, HttpServletRequest request, HttpServletResponse response) { User user = userService.login(name, password); if (user != null) { sessionHelper.saveSession(request, user); String userCode = user.codeNotEmpty(); RememberKey rememberKey = rememberKeyService.generate(userCode); // 生成的 key 保存到 cookie 里 Integer maxInactiveInterval = rememberKey.getMaxInactiveInterval(); addCookie("code", userCode, maxInactiveInterval, response); addCookie("key", rememberKey.getKey(), maxInactiveInterval, response); Map map = new HashMap<>(); map.put("name", name); map.put("role", user.getRole()); return map; } return null; } /** * 添加 cookie * * @param name cookie 名 * @param value cookie 值 * @param maxAge 有效时间(秒) * @param response response */ private void addCookie(String name, String value, Integer maxAge, HttpServletResponse response) { Cookie cookie = new Cookie(name, value); cookie.setMaxAge(maxAge); cookie.setPath("/"); response.addCookie(cookie); } /** * 退出登陆 * * @param request request * @return 是否成功登陆 * @throws OperationException 并非登陆状态 */ @RequestMapping("/logout") @ResponseBody public boolean logout(HttpServletRequest request) throws OperationException { User user = sessionHelper.readSession(request); if (user != null) { sessionHelper.clearSession(request); rememberKeyService.clearOldKey(user.codeNotEmpty()); return true; } throw new OperationException("并非登陆状态"); } /** * 重置密码 * * @param password 旧密码 * @param newPassword 新密码 * @param request request * @return 是否重置成功 */ @RequestMapping("/resetPwd") @ResponseBody public boolean resetPwd(@NotEmpty("password") String password, @NotEmpty("newPassword") String newPassword, HttpServletRequest request) { return userService.resetPassword(password, newPassword); } /** * 初始化管理员 * * @param name 名称 * @param password 密码 * @param request request * @return 账户信息 */ @RequestMapping("/initAdmin") @ResponseBody public User initAdmin(@NotEmpty("name") String name, @NotEmpty("password") String password, HttpServletRequest request) throws OperationException { User user = new User(); user.setName(name); user.setPassword(password); user.setRole(User.Role.Admin); return save(JSONObject.toJSONString(user), request); } /** * 为指定用户分配面板 * * @param userCode 用户 code * @param panelCodes 面板 code * @param request request * @return 分配成功 */ @RequestMapping("/assignPanel") @ResponseBody public boolean assignPanel(@NotEmpty("userCode") String userCode, String[] panelCodes, HttpServletRequest request) { userService.assignPanel(userCode, panelCodes == null ? null : Arrays.asList(panelCodes)); return true; } }