token的設置與獲取


以用戶登錄為例:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM