以用戶登錄為例:
application-resources.yml:
#用戶session在redis中保存的key
REDIS_STU_SESSION_KEY: REDIS_USER_SESSION
#session過期時間
STU_SESSION_EXPIRE: 7200
StuService.java:
//驗證用戶賬號密碼 CustomResult checkLogin(User user, HttpSession session); //獲取token CustomResult getStuByToken(String token);
StuServiceImpl.java:
@Autowired private RedisClient redisClient; @Autowired private UserMapper userMapper; @Autowired private TaskMapper taskMapper; @Value("${REDIS_STU_SESSION_KEY}") private String REDIS_STU_SESSION_KEY; @Value("${STU_SESSION_EXPIRE}") private Integer STU_SESSION_EXPIRE; /** * @return boolean * @Description //驗證用戶是否存在 * @Date 2019-03-31 21:59 * @Param [user] **/ @Override public CustomResult checkLogin(User user,HttpSession session) { CustomResult result = new CustomResult(); UserExample userExample = new UserExample(); UserExample.Criteria criteria = userExample.createCriteria(); criteria.andUsernameEqualTo(user.getUsername()); criteria.andPasswordEqualTo(user.getPassword()); List<User> userList1 = userMapper.selectByExample(userExample); //HttpServletRequest request = null; //HttpSession session = request.getSession(); if (userList1.isEmpty()) { result.setMsg("賬號或密碼錯誤,請重試!"); //return 0;//用戶不存在 return result; } else { criteria.andRoleEqualTo(2); List<User> userList2 = userMapper.selectByExample(userExample); if (userList2.isEmpty()){ result.setMsg("您已成功注冊,請等待管理員審核!"); return result; //return 1;//等待分配權限,管理員審核 }else{ System.out.println("===================="+userList2.get(0)); //登陸成功,設置session session.setAttribute("stuInfo",userList2.get(0)); User userInfo = userList2.get(0); //生成token String token = UUID.randomUUID().toString(); userInfo.setPassword(null); //用戶信息寫入redis(:使redis目錄分層,更為簡潔) redisClient.set(REDIS_STU_SESSION_KEY + ":" + token, JsonUtil.objectToJson(userInfo)); //session過期時間 redisClient.expire(REDIS_STU_SESSION_KEY + ":" + token,STU_SESSION_EXPIRE); //Object stu = redisClient.get("stu"); //System.out.println("========123"+stu); //return 2;//用戶存在,通過管理員審核 return CustomResult.ok(token); } } } /** * @Description //獲取token * @Date 2019-04-10 16:06 * @Param [token] * @return com.sun123.springboot.CustomResult **/ @Override public CustomResult getStuByToken(String token) { String json = (String)redisClient.get(REDIS_STU_SESSION_KEY + ":" + token); //判斷是否為空 if(StringUtils.isBlank(json)){ return CustomResult.build(400,"此session已經過期,請重新登錄"); } //若不為空,更新過期時間 redisClient.expire(REDIS_STU_SESSION_KEY + ":" + token,STU_SESSION_EXPIRE); //返回用戶信息 return CustomResult.ok(JsonUtil.jsonToPojo(json,User.class)); }
LoginController.java:
import com.sun123.springboot.CustomResult; import com.sun123.springboot.entity.User; import com.sun123.springboot.service.StuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpSession; /** * @ClassName LoginController * @Description TODO * @Date 2019/3/31 20:27 * @Version 1.0 */ @Controller public class LoginController { @Autowired private StuService stuService; @GetMapping("/login") public String toLogin(){ return "students/login/stu-login"; } @PostMapping("/checkLogin") @ResponseBody public CustomResult checkLogin(User user, HttpSession session){ //int flag = stuService.checkLogin(user,session); CustomResult result = stuService.checkLogin(user, session); return result; } @GetMapping("/token/{token}") @ResponseBody public CustomResult getUserByToken(@PathVariable String token){ CustomResult stuByToken = stuService.getStuByToken(token); return stuByToken; } }
代碼測試:

查看響應結果:

瀏覽器訪問:http://localhost:8002/token/d6b4f83c-76df-4f99-b6f9-56e6ff9d6acb

