🚀 添加JWT

This commit is contained in:
Bunny 2024-05-05 20:34:10 +08:00
parent f88b4afd82
commit 7762d8f9fa
5 changed files with 81 additions and 1 deletions

View File

@ -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<Claims> 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<Claims> 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));
}
}

View File

@ -23,5 +23,9 @@
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -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();
}
}

View File

@ -31,6 +31,7 @@
<fastjson2.version>2.0.47</fastjson2.version>
<minio.version>8.5.9</minio.version>
<lombok.version>1.18.32</lombok.version>
<jwt.version>0.9.1</jwt.version>
<easyexcel.version>3.3.3</easyexcel.version>
<jodatime.version>2.10.1</jodatime.version>
</properties>
@ -78,6 +79,13 @@
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
<!--jjwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<!-- Excel表操作 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>

View File

@ -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<SysRoleMapper, SysRole> implements SysRoleService {
}