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