package cn.hshb.analysis.core.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
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.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.Date;
public class JWTUtil {
private final static Log logger = LogFactory.getLog(JWTUtil.class);
private static final String SECRET = "n7B1pIPG#F!#1RQ7M1HJwS53$Bn#@H56W@Zc$4x3";
private static final String EXP = "exp";
private static final String PAYLOAD = "payload";
/**
* get jwt String of object
*
* @param object the POJO object
* @param maxAge the milliseconds of life time
* @return the jwt token
*/
public static <T> String sign(T object, long maxAge) {
try {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
JWTCreator.Builder signer = JWT.create();
signer.withClaim(PAYLOAD, JSONObject.toJSONString(object));
long expire = System.currentTimeMillis() + maxAge;
signer.withExpiresAt(new Date(expire));
return signer.sign(algorithm);
} catch (Exception e) {
return null;
}
}
/**
* get the object of jwt if not expired
*
* @return POJO object
*/
public static <T> T unsign(String token, Class<T> classT) {
try {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
JWTVerifier verifier = JWT.require(algorithm).build(); //Reusable verifier instance
DecodedJWT jwt = verifier.verify(token);
Claim claim = jwt.getClaim(PAYLOAD);
return JSON.parseObject(claim.asString(), classT);
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) throws Exception {
Page page = new Page();
String token = JWTUtil.sign(page, 3600000);
logger.info(token);
//Thread.sleep(1200);
//token += "a";
Page currentPage = JWTUtil.unsign(token, Page.class);
logger.info(currentPage);
/*JWTCreator.Builder signer = JWT.create();
signer.withClaim("user", "s");
long expire = System.currentTimeMillis() + 2000 * 1000;
signer.withExpiresAt(new Date(expire));
String token = signer.sign(algorithm);
logger.info(token);
try {
DecodedJWT jwt = JWT.decode(token);
String issuer = jwt.getIssuer();
Claim claim = jwt.getClaim("user");
Date expiresAt = jwt.getExpiresAt();
logger.info(claim.asString());
logger.info(expiresAt.getTime());
} catch (JWTDecodeException exception) {
//Invalid token
}
algorithm = Algorithm.HMAC256("n7B1pIPG#F!#1RQ7M1HJwS53$Bn#@H56W@Zc$4x33");
JWTVerifier verifier = JWT.require(algorithm)
.build(); //Reusable verifier instance
DecodedJWT jwt = verifier.verify(token);
logger.info(jwt);*/
}
}
<!-- jwt token -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>${java-jwt.version}</version>
</dependency>
package cn.hshb.analysis.api.controller;
import cn.hshb.analysis.core.common.ApiResponse;
import cn.hshb.analysis.core.utils.JWTUtil;
import cn.hshb.analysis.entity.exception.BizErrorCode;
import cn.hshb.analysis.entity.model.UserInfo;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @author 作者 * @version V1.0
* @Title: LoginController
* @Package cn.hshb.analysis.api.controller
* 用于身份登录认证
* @date 2018/2/22 15:14
*/
@RestController
public class LoginController {
private static List<UserInfo> validPeoples = new ArrayList<>();
static {
/*
* 此处设置可以用于登录的用户身份信息,发布正式环境时需要避免用户名密码过于简单 */
validPeoples.add(new UserInfo("admin", "admin"));
validPeoples.add(new UserInfo("admin124", "154123"));
validPeoples.add(new UserInfo("admin1223", "addsfs"));
}
@RequestMapping({"/login"})
public ApiResponse login(@RequestParam String username, @RequestParam String password) {
/**
* @param:[username, password]
* 登录认证
* 第三方系统要调用此系统中的接口必须先调用此接口获取token
* @return: cn.hshb.analysis.core.common.ApiResponse
* @date:2018/2/22
*/
if (username == null || password == null) {
return ApiResponse.fail();
}
UserInfo user = null;
for (UserInfo userInfo : validPeoples) {
if (username.equals(userInfo.getUsername())) {
user = userInfo;
break;
}
}
if (user == null) {
return ApiResponse.fail(BizErrorCode.CU_MSG_000002.getCode(), BizErrorCode.CU_MSG_000002.getMsg());
} else {
if (!password.equals(user.getPassword())) {
return ApiResponse.fail(BizErrorCode.CU_MSG_000007.getCode(), BizErrorCode.CU_MSG_000007.getMsg());
}
}
JSONObject data = new JSONObject();
data.put("token", JWTUtil.sign(user, 7200 * 1000));
data.put("expire", 7200);
return ApiResponse.success(data);
}
}
分享到:
相关推荐
JWT是什么 JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session...
JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。 基于session的登录认证 在传统的用户登录认证中,因为http是无状态的,所以都是...
赠送jar包:nimbus-jose-jwt-4.41.1.jar; 赠送原API文档:nimbus-jose-jwt-4.41.1-javadoc.jar; 赠送源代码:nimbus-jose-jwt-4.41.1-sources.jar; 赠送Maven依赖信息文件:nimbus-jose-jwt-4.41.1.pom; 包含...
赠送jar包:spring-security-jwt-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-jwt-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-jwt-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
nginx安装lua、jwt模块,通过lua验证jwt实现蓝绿发布样例demo,配置直接可用 luajit2-2.1-20220411.tar.gz #luajit官网存在一定的坑,下载openresty的优化版本 lua-nginx-module-0.10.22.tar.gz # 0.10.16 以后都...
SpringSecurity-JWT-VERSION2(AccessToken和RefreshToken) version1太复杂,无法优化。accessToken refreshToken流安全登录处理流程详细说明转到博客文章JWT异常处理安全异常处理(AuthenticationEntryPoint,...
Spring-Security结合JWT 实现前后端分离完成权限验证功能案例,案例中,主要完成用户登录获取Token,通过Token访问Rest接口,没有权限或授权失败时返回JSON,前端根据状态码进行重新登录;案例中的用户名称: jake_j...
正在测试JWT鉴权或者学习JWT的,需要解码token的可以看看。
jwt.jar包 jwt所需jar包集合 使用commons-codec.jar + java-jwt.jar进行token认证,支持jdk1.7及以上版本,目前大多数jwt支持至少需要1.8及以上,资源不好找,且行且珍惜。 如果需要源码以及功能实现方式,请联系...
基于SpringBoot+JWT+Vue的权限管理系统源码,基于SpringBoot+JWT+Vue的权限管理系统基于SpringBoot+JWT+Vue的权限管理系统基于SpringBoot+JWT+Vue的权限管理系统基于SpringBoot+JWT+Vue的权限管理系统基于SpringBoot...
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 适用场景 1、用于向Web应用传递一些非敏感信息。例如完成加好友、下订单的操作等等。 2、用于设计...
签发JWT,验证JWT,解析JWT字符串
SpringBoot+SpringSecurity+JWT+MybatisPlus实现基于注解的权限验证,可根据注解的格式不同,做到角色权限控制,角色加资源权限控制等,粒度比较细化。 @PreAuthorize("hasAnyRole('ADMIN','USER')"):具有admin或...
[JWT]的全称为Json Web Token (JWT),是目前最流行的跨域认证解决方案,是在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),JWT 是一种JSON风格的轻量级的授权和身份认证规范,可实现无状态、...
Spring Boot 提供了一个 spring-security-jwt 模块,用于生成和验证 JWT。 在使用 Spring Boot 集成 OAuth2 授权框架时,我们需要注意以下几点: * 需要正确地配置授权服务器和资源服务器 * 需要正确地实现身份...
赠送jar包:nimbus-jose-jwt-3.9.jar; 赠送原API文档:nimbus-jose-jwt-3.9-javadoc.jar; 赠送源代码:nimbus-jose-jwt-3.9-sources.jar; 赠送Maven依赖信息文件:nimbus-jose-jwt-3.9.pom; 包含翻译后的API文档...
实现Java web token JWT所需的jar包,java-jwt.3.3.0.jar,可用于登录验证
yshop基于当前流行技术组合的前后端分离商城系统: SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含分类、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、...
JWT公钥私钥操作工具类
这是实现Java token JWT所需的jar包,该jar包是jjwt.jar