package com.example.sso.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author qx
* @date 2023/7/4
* @des JWT工具类
*/
@Component
public class JwtUtil {
@Autowired
private JwtProperties jwtProperties;
/**
* 生成一个jwt字符串
*
* @param username 用户名
* @return jwt字符串
*/
public String sign(String username) {
Algorithm algorithm = Algorithm.HMAC256(jwtProperties.getSecret());
return JWT.create()
// 设置过期时间1个小时
.withExpiresAt(new Date(System.currentTimeMillis() + jwtProperties.getExpireTime() * 60 * 1000))
// 设置负载
.withClaim("username", username).sign(algorithm);
}
/**
* 生成refreshToken
*
* @param username 用户名
* @return
*/
public String refreshToken(String username) {
Algorithm algorithm = Algorithm.HMAC256(jwtProperties.getSecret());
return JWT.create()
// 设置更新时间2个小时
.withExpiresAt(new Date(System.currentTimeMillis() + jwtProperties.getRefreshTime() * 60 * 1000))
// 设置负载
.withClaim("username", username).sign(algorithm);
}
public static void main(String[] args) {
Algorithm algorithm = Algorithm.HMAC256("KU5TjMO6zmh03bU3");
String username = "admin";
String token = JWT.create()
// 设置过期时间1个小时
.withExpiresAt(new Date(System.currentTimeMillis() + 60 * 60 * 1000))
// 设置负载
.withClaim("username", username).sign(algorithm);
System.out.println(token);
}
/**
* 校验token是否正确
*
* @param token token值
*/
public boolean verify(String token) {
if (token == null || token.length() == 0) {
throw new RuntimeException("token为空");
}
try {
Algorithm algorithm = Algorithm.HMAC256(jwtProperties.getSecret());
JWTVerifier jwtVerifier = JWT.require(algorithm).build();
DecodedJWT decodedJWT = jwtVerifier.verify(token);
Map<String, Claim> map = decodedJWT.getClaims();
System.out.println("claims:" + map.get("username").asString());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 重新生成token和refreshToken
*
* @param refreshToken refreshToken
* @return 返回token和refreshToken
*/
public Map<String, String> refreshJwt(String refreshToken) {
if (refreshToken == null || refreshToken.length() == 0) {
throw new RuntimeException("refreshToken为空");
}
Algorithm algorithm = Algorithm.HMAC256(jwtProperties.getSecret());
JWTVerifier jwtVerifier = JWT.require(algorithm).build();
DecodedJWT decodedJWT = jwtVerifier.verify(refreshToken);
Map<String, Claim> map = decodedJWT.getClaims();
// 获取用户名
String username = map.get("username").asString();
Map<String, String> resultMap = new HashMap<>();
// 重新生成token和refreshToken
resultMap.put("token", sign(username));
resultMap.put("refreshToken", refreshToken(username));
return resultMap;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
JWT实现单点登录解决方案demo
共123个文件
xml:76个
class:10个
java:10个
需积分: 0 2 下载量 28 浏览量
2024-04-03
22:23:16
上传
评论
收藏 200KB ZIP 举报
温馨提示
JWT实现单点登录解决方案demo
资源推荐
资源详情
资源评论
收起资源包目录
JWT实现单点登录解决方案demo (123个子文件)
JwtUtil.class 4KB
LoginFilter.class 4KB
LoginService.class 2KB
AuthController.class 2KB
JwtProperties.class 1KB
ProjectAApplication.class 819B
SsoApplication.class 728B
IndexController.class 692B
ProjectAApplicationTests.class 539B
SsoApplicationTests.class 514B
mvnw.cmd 7KB
mvnw.cmd 7KB
.gitignore 395B
.gitignore 395B
.gitignore 395B
.gitignore 184B
login.html 340B
login.html 340B
sso.iml 8KB
projectA.iml 8KB
my-sso.iml 5KB
maven-wrapper.jar 61KB
maven-wrapper.jar 61KB
JwtUtil.java 4KB
LoginFilter.java 3KB
AuthController.java 2KB
LoginService.java 2KB
JwtProperties.java 540B
ProjectAApplication.java 417B
IndexController.java 399B
SsoApplication.java 314B
ProjectAApplicationTests.java 211B
SsoApplicationTests.java 201B
HELP.md 860B
HELP.md 430B
mvnw 11KB
mvnw 11KB
maven-wrapper.properties 233B
maven-wrapper.properties 233B
application.properties 33B
application.properties 33B
application.properties 28B
application.properties 28B
workspace.xml 6KB
pom.xml 2KB
pom.xml 2KB
pom.xml 1KB
compiler.xml 984B
jarRepositories.xml 864B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_0_5_RELEASE.xml 769B
Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_0_5_RELEASE.xml 762B
Maven__org_springframework_boot_spring_boot_starter_logging_2_0_5_RELEASE.xml 748B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_0_5_RELEASE.xml 741B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_0_5_RELEASE.xml 734B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_6.xml 729B
Maven__org_springframework_boot_spring_boot_starter_test_2_0_5_RELEASE.xml 727B
Maven__org_springframework_boot_spring_boot_starter_json_2_0_5_RELEASE.xml 727B
Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_1_RELEASE.xml 725B
Maven__org_springframework_boot_spring_boot_starter_web_2_0_5_RELEASE.xml 720B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 700B
Maven__org_springframework_boot_spring_boot_starter_2_0_5_RELEASE.xml 692B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_6.xml 688B
Maven__org_hibernate_validator_hibernate_validator_6_0_12_Final.xml 681B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_6.xml 674B
Maven__org_springframework_boot_spring_boot_test_2_0_5_RELEASE.xml 671B
misc.xml 668B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_8_5_34.xml 660B
Maven__org_springframework_spring_expression_5_0_9_RELEASE.xml 658B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml 644B
Maven__org_springframework_spring_context_5_0_9_RELEASE.xml 637B
Maven__org_springframework_boot_spring_boot_2_0_5_RELEASE.xml 636B
Maven__org_thymeleaf_thymeleaf_spring5_3_0_9_RELEASE.xml 634B
Maven__org_springframework_spring_webmvc_5_0_9_RELEASE.xml 630B
Maven__org_apache_tomcat_embed_tomcat_embed_core_8_5_34.xml 625B
Maven__com_fasterxml_jackson_core_jackson_databind_2_9_6.xml 623B
Maven__org_springframework_spring_beans_5_0_9_RELEASE.xml 623B
Maven__org_springframework_spring_test_5_0_9_RELEASE.xml 616B
Maven__org_springframework_spring_core_5_0_9_RELEASE.xml 616B
Maven__org_apache_tomcat_embed_tomcat_embed_el_8_5_34.xml 611B
Maven__javax_annotation_javax_annotation_api_1_3_2.xml 611B
Maven__javax_validation_validation_api_2_0_1_Final.xml 611B
Maven__org_springframework_spring_jcl_5_0_9_RELEASE.xml 609B
Maven__org_springframework_spring_aop_5_0_9_RELEASE.xml 609B
Maven__org_springframework_spring_web_5_0_9_RELEASE.xml 609B
Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml 608B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_10_0.xml 608B
Maven__com_fasterxml_jackson_core_jackson_core_2_9_6.xml 595B
Maven__org_attoparser_attoparser_2_0_4_RELEASE.xml 589B
encodings.xml 587B
Maven__org_unbescape_unbescape_1_1_5_RELEASE.xml 578B
Maven__net_bytebuddy_byte_buddy_agent_1_7_11.xml 578B
Maven__org_thymeleaf_thymeleaf_3_0_9_RELEASE.xml 578B
Maven__org_apache_logging_log4j_log4j_api_2_10_0.xml 573B
Maven__ch_qos_logback_logback_classic_1_2_3.xml 568B
Maven__org_hamcrest_hamcrest_library_1_3.xml 553B
Maven__ch_qos_logback_logback_core_1_2_3.xml 547B
Maven__com_jayway_jsonpath_json_path_2_4_0.xml 546B
Maven__commons_codec_commons_codec_1_11.xml 543B
Maven__net_minidev_accessors_smart_1_2.xml 542B
Maven__org_mockito_mockito_core_2_15_0.xml 542B
共 123 条
- 1
- 2
资源评论
扉扬
- 粉丝: 23
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功