技术标签: Java jwt springboot
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
public class JWTUtil {
//签名
private static final String SING = "#$er#$#%AFD(";
//生成token
public static String getToken(Map<String,Object> map) {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.DATE,7);
JWTCreator.Builder builder = JWT.create();
map.forEach((k,v)->{
builder.withClaim(k, v.toString());
});
builder.withExpiresAt(instance.getTime());
String token = builder.sign(Algorithm.HMAC256(SING));
return token;
}
//验证token合法性
public static DecodedJWT verifyToken(String token) {
return JWT.require(Algorithm.HMAC256(SING)).build().verify(token);//
}
}
前端发送请求,将token放进Header中,拦截器拦截请求后,获取token,并验证是否合格。
@Configuration
public class JWTInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map<String,Object> map = new HashMap<>();
//获取请求头中令牌
String token = request.getHeader("token");
try{
JWTUtil.verifyToken(token);
return true;
}catch (SignatureVerificationException e) {
e.printStackTrace();
map.put("msg","无效签名");
}catch(TokenExpiredException e){
e.printStackTrace();
map.put("msg","token过期");
}catch (AlgorithmMismatchException e) {
e.printStackTrace();
map.put("msg","token算法不一致");
}catch (InvalidClaimException e) {
e.printStackTrace();
map.put("msg","token无效");
}
map.put("token",false);
String json = new ObjectMapper().writeValueAsString(map);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().println(json);
return false;
}
}
/**
并在WebMvcConfigurer配置类中注册拦截器,添加拦截目标
*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new JWTInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login");
}
}
@GetMapping("/login")
public Map<String,Object> login(String name,String password){
Map<String,Object> map = new HashMap<>();
try{
User user = iLeaderService.login(name,password);
Map<String,Object> payload = new HashMap<>();
payload.put("id",user.getId());
payload.put("name",user.getname());
payload.put("password",user.getPassword());
String token = JWTUtil.getToken(payload);
map.put("state",true);
map.put("msg","登陆成功成功");
map.put("token",token);
}catch (Exception e) {
map.put("state",false);
map.put("msg",e.getMessage());
}
return map;
}
public void test(HttpServletRequest request) {
String token = request.getHeader("token");
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("#$er#$#%AFD(")).build();
DecodedJWT verify = jwtVerifier.verify(token);
Integer id = verify.getClaim("userId").asInt();
String username = verify.getClaim("userName").asString();
}
文章浏览阅读2k次。大家糟糕,于我们的学习工作之中,远程登陆已经知IP地址的电脑也许会常常用到,今天小编便与大家讲解几种方法,区别windows系统与linux系统:一、windows系统这里重要是利用远程控制软件来构建,假如是局域网,系统自从带的远程桌面相连便路,假如是非局域网,常用的远程控制软件便路。1.局域网这里重要是利用远程控制软件来构建,假如是局域网,系统自从带的远程桌面相连便路,假如是非局域网,常用的远程..._通过ip进入linux系统
文章浏览阅读3.4k次,点赞5次,收藏41次。基于 STP 的可靠网络配置网络技术是一个广阔而不断演化的领域,不断学习和不断更新知识是成功的关键。你已经迈出了第一步,学习并部署STP,这只是冰山一角。继续前进,探索更多的网络协议和技术,不断提高自己的技能_ensp 部署stp
文章浏览阅读553次。基础篇:操作系统、计算机网络、设计模式一:操作系统1. 进程的有哪几种状态,状态转换图,及导致转换的事件。2. 进程与线程的区别。3. 进程通信的几种方式。4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)5. 线程的实现方式. (也就是用户线程与内核线程的区别)6. 用户态和核心态的区别。7. 用户栈和内核栈的区_面试常考题
文章浏览阅读501次。用云服务器彩虹挂机 内容精选换一换当云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等场景均可能导致云服务器无法正常登录。当您的云服务器无法远程登录时,我们建议您首先检查是否可以通过控制台远程登录。再参考排查思路检查登录异常的原因。远程登录失败时,请首先尝试能否通过管理控制台,使用VNC方式登录云服务器。单击这里了解云服务器登录前的准备工作。登录管理本文介绍如何在 Linux..._彩虹引擎云服务器架设
文章浏览阅读257次,点赞5次,收藏4次。人工智能(AI)技术在文章润色领域的应用随着 AI 技术日新月异,其应用范围涵盖多个领域,其中包括文章润色网站。该技术运用自然语言处理及机器学习算法,助益提升文章品质,提高阅读体验,让作者享受更优质的写作过程。用户只需上传文稿至AI润色网站,即可实现自动化校正、修订及建议服务
文章浏览阅读1.4k次。netstat -an|grep 80 查看80端口进程列表_liunx中如何查端口号命令
文章浏览阅读369次。大量操作系统迅雷下载(不是BT) WindowsXP 家庭版不用多做解释了吧!WindowsXP原版ISOSN:KWXXK-KD43C-86JQV-6BM33-FBMXG点击下载:==============================ftp://down:[email protected]/system/winxp_home_cn.iso=====..._windows me 原版iso
文章浏览阅读5.3k次,点赞2次,收藏16次。1、文件夹直接拖、项目面板双击,导入单个或者多个,或者文件夹;项目左下角,改变视图;项目右下脚,可新建文件夹管理(素材箱);导入图片时,选择是否分层,因为图片从ps编辑时,可能有多个图层;当分层导入时,会比图层数目多一个,是序列;导入序列帧:是以帧为单位的一系列图片,但是直接导入是图片,因此以序列帧格式导入,才能是视频; 导入时,选中第一个,根据命名,电脑会直接识别序列帧,勾选左下脚:“图像序列”;序列帧命名时, 注意位数;07、脱机008 文件序列的创建创建序列,项目右下角 序列_pr基本操作
文章浏览阅读63次。为什么80%的码农都做不了架构师?>>> ..._oracle请求xfire内容缺失
文章浏览阅读1.1k次。一:jdk安装版本——1.8.0_171step:默认开发工具,默认文件路劲二:jdk变量三个1_"c:\\program files\\java\\jdk1.8.0_212\\bin\\java.exe\" -xx:tieredstopatlevel=1 -n"
文章浏览阅读734次。SynchronizedMap实现上在调用Map的所有方法是,对整个map进行了同步!public V put(K key, V value) { synchronized (mutex) {return m.put(key, value);}}ConcurrentHashMap的实现却更加精细,他对要操作的桶加锁,而不是整个加锁,所以ConcurrentHashMap在性能..._sequencedhashmap 和 concurrenthashmap 区别是什么
文章浏览阅读815次,点赞14次,收藏30次。JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。@Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试。: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。