From 7762d8f9fa386c644963af592bff5f5e66345a27 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sun, 5 May 2024 20:34:10 +0800 Subject: [PATCH] =?UTF-8?q?:rocket:=20=E6=B7=BB=E5=8A=A0JWT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/bunny/common/utils/JwtHelper.java | 51 +++++++++++++++++++ common/pom.xml | 4 ++ .../security/config/WebSecurityConfig.java | 8 ++- pom.xml | 8 +++ .../service/impl/SysRoleServiceImpl.java | 11 ++++ 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 common/common-utils/src/main/java/cn/bunny/common/utils/JwtHelper.java create mode 100644 service/src/main/java/cn/bunny/service/service/impl/SysRoleServiceImpl.java diff --git a/common/common-utils/src/main/java/cn/bunny/common/utils/JwtHelper.java b/common/common-utils/src/main/java/cn/bunny/common/utils/JwtHelper.java new file mode 100644 index 0000000..f8a792e --- /dev/null +++ b/common/common-utils/src/main/java/cn/bunny/common/utils/JwtHelper.java @@ -0,0 +1,51 @@ +package cn.bunny.common.utils; + +import io.jsonwebtoken.*; +import org.springframework.util.StringUtils; + +import java.util.Date; + +public class JwtHelper { + private static final long tokenExpiration = 365L * 24 * 60 * 60 * 1000; + private static final String tokenSignKey = "Bunny-Java-Template"; + + public static String createToken(Long userId, String userName) { + return Jwts.builder() + .setSubject("OA-USER") + .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) + .claim("userId", userId) + .claim("userName", userName) + .signWith(SignatureAlgorithm.HS256, tokenSignKey) + .compressWith(CompressionCodecs.GZIP) + .compact(); + } + + public static Long getUserId(String token) { + if (!StringUtils.hasText(token)) return null; + + Jws claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); + Claims claims = claimsJws.getBody(); + Integer userId = (Integer) claims.get("userId"); + return userId.longValue(); + // return 1L; + } + + public static String getUserName(String token) { + if (!StringUtils.hasText(token)) return ""; + + Jws claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token); + Claims claims = claimsJws.getBody(); + return (String) claims.get("userName"); + } + + public static void removeToken(String token) { + // jwttoken无需删除,客户端扔掉即可。 + } + + public static void main(String[] args) { + String token = JwtHelper.createToken(7L, "admin"); + System.out.println(token); + System.out.println(JwtHelper.getUserId(token)); + System.out.println(JwtHelper.getUserName(token)); + } +} \ No newline at end of file diff --git a/common/pom.xml b/common/pom.xml index b51cdb2..f201208 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -23,5 +23,9 @@ model 0.0.1-SNAPSHOT + + io.jsonwebtoken + jjwt + diff --git a/common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java b/common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java index 459fa71..5615894 100644 --- a/common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java +++ b/common/spring-security/src/main/java/cn/bunny/security/config/WebSecurityConfig.java @@ -12,6 +12,7 @@ import org.springframework.security.config.annotation.method.configuration.Enabl import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.core.session.SessionRegistry; import org.springframework.security.core.session.SessionRegistryImpl; import org.springframework.security.web.SecurityFilterChain; @@ -56,7 +57,7 @@ public class WebSecurityConfig { // 最大登录数为1 session.maximumSessions(1) // 可以获取到所有登录的用户,以及登录状态,设置session状态 - .sessionRegistry(new SessionRegistryImpl()) + .sessionRegistry(sessionRegistry()) // 有相同用户已登录时 .expiredSessionStrategy(new SecuritySessionInformationExpiredStrategy()); // 会话失效,同时内容 @@ -77,4 +78,9 @@ public class WebSecurityConfig { return httpSecurity.build(); } + + @Bean + public SessionRegistry sessionRegistry() { + return new SessionRegistryImpl(); + } } diff --git a/pom.xml b/pom.xml index 404e60c..16c81e2 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,7 @@ 2.0.47 8.5.9 1.18.32 + 0.9.1 3.3.3 2.10.1 @@ -78,6 +79,13 @@ hutool-all 5.8.25 + + + io.jsonwebtoken + jjwt + ${jwt.version} + + com.alibaba easyexcel diff --git a/service/src/main/java/cn/bunny/service/service/impl/SysRoleServiceImpl.java b/service/src/main/java/cn/bunny/service/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..5dbbb4a --- /dev/null +++ b/service/src/main/java/cn/bunny/service/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,11 @@ +package cn.bunny.service.service.impl; + +import cn.bunny.entity.system.SysRole; +import cn.bunny.service.mapper.SysRoleMapper; +import cn.bunny.service.service.SysRoleService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +@Service +public class SysRoleServiceImpl extends ServiceImpl implements SysRoleService { +}