From 129bc8f0c9bce0306aa99fafde97689f645dbbb5 Mon Sep 17 00:00:00 2001
From: whycxzp <perryhsu@163.com>
Date: 星期三, 20 一月 2021 09:39:30 +0800
Subject: [PATCH] finish basic jwt func

---
 src/main/java/com/whyc/service/LoginService.java |   66 ++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/whyc/service/LoginService.java b/src/main/java/com/whyc/service/LoginService.java
index 0805e52..5cca6f3 100644
--- a/src/main/java/com/whyc/service/LoginService.java
+++ b/src/main/java/com/whyc/service/LoginService.java
@@ -1,17 +1,33 @@
 package com.whyc.service;
 
+import com.google.gson.Gson;
+import com.whyc.constant.SuperConstant;
 import com.whyc.dto.Response;
+import com.whyc.manager.JWTManager;
+import com.whyc.pojo.User;
 import com.whyc.util.ShiroUtil;
+import net.minidev.json.JSONObject;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.subject.Subject;
+import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
+import org.apache.shiro.web.util.WebUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Service
 public class LoginService {
+
+    @Autowired
+    JWTManager jwtManager;
 
     public Response login(String userName, String password, HttpServletRequest request) {
         UsernamePasswordToken userToken = new UsernamePasswordToken(userName, password);
@@ -31,8 +47,56 @@
         return new Response<>().set(1,false);
     }
 
-    public void logout() {
+    public Response login4Jwt(String userName, String password, HttpServletRequest request) {
+        UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
+        Subject subject = SecurityUtils.getSubject();
+        String jwt =null;
+        try {
+            subject.login(token);
+            //鐧诲綍鍚庨鍙戜护鐗�
+            String shiroSessionId = ShiroUtil.getShiroSessionId();
+            User user = ShiroUtil.getUser();
+            Map<String, Object> claims = new HashMap<>();
+            claims.put("user", new Gson().toJson(user));
+            //jwt = jwtManager.issueToken("system", subject.getSession().getTimeout(), shiroSessionId, claims);
+            jwt = jwtManager.issueToken("system", 10000, shiroSessionId, claims);
+        }catch (Exception e){
+            return new Response<>().set(1,false);
+        }
+        if (subject.isAuthenticated()){
+            //姣忎釜鐧诲綍鐨勭敤鎴烽兘鏈変竴涓叏灞�鍙橀噺,閲岄潰瀛樼潃瀵瑰簲鐨凷essionId;
+            //鍚屼竴涓处鍙�,鍚庨潰鐧诲綍鐨�,浼氭尋鎺変箣鍓嶇櫥褰曠殑SessionId
+            System.out.println("鍏ㄥ眬瀛樺偍涓綋鍓峉essionId涓�:"+request.getSession().getId());
+            request.getServletContext().setAttribute(userName,request.getSession().getId());
+            //鏍规嵁Context瀛樺偍鐨勫搴旂殑鍊�,鑾峰彇褰撳墠鐨勭敤鎴峰悕
+            request.getServletContext().setAttribute(request.getSession().getId(),userName);
+            //鐧诲綍鐨勬椂鍊欏垵濮嬪寲 娲昏穬鏍囪瘑
+            request.getServletContext().setAttribute("exp_" + userName, System.currentTimeMillis());
+            //杩欓噷瀛樺偍涓媕wt鐨勯泦鍚�,鍦ㄧ櫥鍑虹殑鏃跺��,鍘婚櫎
+            List<String> jwts =null;
+            if(request.getServletContext().getAttribute("jwts")==null){
+                jwts = new ArrayList<>();
+            }else {
+                jwts = (List) request.getServletContext().getAttribute("jwts");
+            }
+            jwts.add(jwt);
+            request.getServletContext().setAttribute("jwts",jwts);
+
+            return new Response<>().set(1,true,jwt);
+        }
+        return new Response<>().set(1,false);
+    }
+
+    public void logout(ServletRequest request) {
+        //娓呴櫎Subject涓粦瀹氱殑淇℃伅
         Subject subject = SecurityUtils.getSubject();
         subject.logout();
+        //娓呴櫎jwts涓殑jwt淇℃伅
+        String jwt = WebUtils.toHttp(request).getHeader(SuperConstant.AUTHORIZATION);
+        List jwts = (List) request.getServletContext().getAttribute("jwts");
+        jwts.remove(jwt);
+        request.getServletContext().setAttribute("jwts",jwts);
+        //娓呴櫎Context涓繚瀛樼殑SessionId鍊�
+        request.getServletContext().removeAttribute(((HttpServletRequest)request).getSession().getId());
     }
 }

--
Gitblit v1.9.1