springboot實現token鑒權


參考:https://www.cnblogs.com/shihaiming/p/9565835.html

使用token鑒權需要引入依賴jar包

一、pom

<dependency>
      <groupId>com.auth0</groupId>
      <artifactId>java-jwt</artifactId>
      <version>3.4.0</version>
</dependency>

 

二、controller層代碼

登錄和判斷登錄

@PostMapping("/login2")
    public BaseResponse<String> login2(@RequestParam String username, @RequestParam String password) {
        String token = userService.doLogin2(username, password);
        return BaseResultUtils.success(token);
    }

    @GetMapping("/isLogin2")
    public BaseResponse<String> isLogin2(HttpServletRequest request){
        String token = request.getHeader("token");
        if (token == null) {
            return BaseResultUtils.error(ERROR6);
        }
        String username = JWT.decode(token).getAudience().get(0);
        User user = userService.getUser(username);
        if (user == null) {
            return BaseResultUtils.error(ERROR6);
        } else {
            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
            try {
                jwtVerifier.verify(token);
            } catch (JWTVerificationException e) {
                return BaseResultUtils.error(ERROR6);
            }
            return BaseResultUtils.success(true);
        }
    }

三、service層代碼

@Override
    public String doLogin2(String username, String password) {
        User user = userMapper.select(username);
        if (user != null && user.getPassword().equals(password)) {
            return user.getToken(user);
        } else {
            throw new LoginFailureException();
        }
    }

四、model層代碼

在user類中,加入getToken方法

public String getToken(User user) {
        return JWT.create().withAudience(user.getUsername())
                .sign(Algorithm.HMAC256(user.getPassword()));
    }

測試登錄,登錄成功即可返回token

 

 測試是否登錄,傳入token即可通過鑒權

 附錄:

java實現簡單登錄驗證接口,並生成一個cookie返回給前端,下一次前端請求的時候帶着cookie,就不用再登錄了

進一步來說,還可以把cookie信息存在Redis中,可以通過cookie反向查找到用戶信息

@PostMapping("/login")
    public BaseResponse<String> login(@RequestParam String username, @RequestParam String password, HttpSession session, HttpServletResponse response) {
        String companyId = userService.doLogin(username, password);
        String sessionId = userMap.getOrDefault(username, session.getId());
        session.setMaxInactiveInterval(-1);
        //保存session
        userMap.put(username, sessionId);
        Cookie cookie = new Cookie("SESSION", sessionId);
        cookie.setMaxAge(31536000);
        response.addCookie(cookie);
        return BaseResultUtils.success(companyId);
    }

doLogin就是拿着用戶提供的賬號密碼跟數據庫中的進行比對,成功就返回,失敗還要進行第二次嘗試登錄

@Override
    public String doLogin(String username, String password) {
        User user = userMapper.select(username);
        if (user != null && user.getPassword().equals(password)) {
            return user.getCompanyId();
        } else {
            throw new LoginFailureException();
        }
    }

 


免責聲明!

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



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