1. token jwt配置

1.1. pom

 		<!-- token验证 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>

1.2. 代码

1.2.1. 生成token

@Configuration
public class JwtToken { /**
* 生成jwt token
*/
public Token generateToken(Long userId) {
Date date = new Date();
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
Date expiration = DateUtils.addDays(new Date(), 3);
String token = Jwts.builder()
// 设置header
.setHeaderParam("typ", "JWT")
// 设置签发时间
.setHeaderParam("alg", "HS256").setIssuedAt(date)
.setExpiration(expiration)
// 设置内容
.claim("userId", String.valueOf(userId))
// 设置签发人
.setIssuer("lll")
// 签名,需要算法和key
.signWith(signatureAlgorithm, "xxxxx").compact();
return new Token().setExpireTime(expiration).setToken(token).setUserId(userId);
} }

1.2.2. token拦截器

public class TokenInterceptor implements HandlerInterceptor {

    @Autowired
private ITokenService tokenService; @Autowired
private JwtToken jwtToken; private Map<Long, Token> tokenMap = new ConcurrentHashMap<>(); public Set<String> passPath = new HashSet<>(); /**
* 添加token
*
* @param userId
* @return
*/
public Token addToken(Long userId) {
Token token = jwtToken.generateToken(userId);
tokenMap.put(userId, token); Token tk = tokenService.getById(userId);
if (tk != null) {
tokenService.updateById(token);
} else {
tokenService.save(token);
}
return token;
} public TokenInterceptor() {
init();
} @Value("${token.enabled:false}")
public boolean openToken; /**
* token开关
*
* @param openToken
*/
public void setOpenToken(boolean openToken) {
this.openToken = openToken;
} @PostConstruct
private void init() {
passPath.add("/fund/user/");
passPath.add("/fund/user/login");
} private boolean isFilter(String uri) {
if (!openToken) {
return true;
}
return passPath.stream().anyMatch(s -> s.equals(uri));
} @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
//普通路径放行
if (isFilter(request.getRequestURI())) {
return true;
} //权限路径拦截
response.setCharacterEncoding("UTF-8");
final String headerToken = request.getHeader("x-access-token");
//判断请求信息
if (null == headerToken || "".equals(headerToken.trim())) {
response.getWriter().write("用户未登录,请先登录");
return false;
}
//解析Token信息
try {
Claims claims = Jwts.parser().setSigningKey("beikbank@fund").parseClaimsJws(headerToken).getBody();
String tokenUserId = (String) claims.get("userId");
Long itokenUserId = Long.parseLong(tokenUserId);
//根据客户Token查找缓存Token
Token myToken = tokenMap.get(itokenUserId); //缓存没有Token记录
if (null == myToken) {
Token token = tokenService.getById(itokenUserId);
if (token != null) {
if (judgeToken(response, headerToken, claims, itokenUserId, token)) {
return false;
}
}
return true;
}
if (judgeToken(response, headerToken, claims, itokenUserId, myToken)) {
return false;
} } catch (Exception e) {
e.printStackTrace();
response.getWriter().write("发生异常,请重新登录");
return false;
}
//最后才放行
return true;
} private boolean judgeToken(HttpServletResponse response, String headerToken, Claims claims, Long itokenUserId, Token myToken) throws IOException {
//缓存Token与客户Token比较
if (!headerToken.equals(myToken.getToken())) {
response.getWriter().write("token不正确,请重新登录");
return true;
}
//判断Token过期
Date tokenDate = claims.getExpiration();
if (tokenDate.before(new Date())) {
tokenMap.remove(itokenUserId);
tokenService.removeById(itokenUserId);
response.getWriter().write("token过期,请重新登录");
return true;
}
return false;
}
}

1.2.3. 设置token

  1. token设置,在登录时设置
    @Autowired
private TokenInterceptor tokenInterceptor; @ApiOperation(value = "用户登录", notes = "用户登录")
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity login( @RequestBody @ApiParam(name = "user", value = "用户", required = true) @Valid User user) {
boolean result = userService.vaildLogin(user);
Token token = tokenInterceptor.addToken(user.getUserId());
return ResponseEntity.ok(result ? ok(token) : error("登录失败,请检查用户名和密码"));
}

token jwt配置的更多相关文章

  1. spring boot rest 接口集成 spring security(2) - JWT配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  2. JSON WEB Token(JWT)

    最近面试被问及单点登陆怎么解决?自己的项目前后端分离,自己实现token认证,token有失效时间,token中包含用户基本的信息.且一个当用户重新登陆后,原来的token就会失效,这么安全的一个to ...

  3. JSON Web Token (JWT) 简介

    JSON Web Token (JWT) 是一种基于 token 的认证方案. JSON Web Token 的结构 一个 JWT token 看起来是这样的: eyJhbGciOiJIUzI1NiI ...

  4. JSON Web Token (JWT) 实现与使用方法

    1. JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该 ...

  5. Json Web Token(JWT)详解

    什么是Json Web Token Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的 ...

  6. JSON Web Token (JWT),服务端信息传输安全解决方案。

    JWT介绍 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式.这些信息可以被验证和信任,因为它是数字签名的 ...

  7. json web token JWT实现TP5创建和验证

    根据博客进行jwt初始化配置 https://blog.csdn.net/weixin_43389208/article/details/117442266?spm=1001.2014.3001.55 ...

  8. 基于 Token 的身份验证:JSON Web Token(JWT)

    1.传统身份验证和JWT的身份验证 传统身份验证:       HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用.这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过 ...

  9. JSON Web Token (JWT) - Weak secret

    This API with its /hello endpoint (accessible with GET) seems rather welcoming at first glance but i ...

随机推荐

  1. Proj.4 升级新版本5.x和6.x

    目录 Proj.4 升级新版本5.x和6.x 0.缘起 1.5.x和6.x更新情况简述 PROJ 5.x 更新 PROJ 6.x 更新 2.从PROJ.4向新版本迁移 迁移到5.x版本 迁移到6.x版 ...

  2. quartus仿真提示: Can't launch the ModelSim-Altera software

    quartus仿真提示: Can't launch the ModelSim-Altera software 2017年07月13日 17:54:50 小怪_tan 阅读数:3255   路径中的结尾 ...

  3. C#中得到每周,每月,每季,每年的年初末日期

    DateTime表示时间上的一刻,通常以日期和当天的时间表示.借用这个结构,我们可以实现较丰富的功能,本文给出得到每周每天的方法,及得到本月第一天,本月最后一天,本季第一天,本季最后一天,本年第一天及 ...

  4. apache Request-URI Too Large 处理办法

    在Apache的httpd.conf配置文件中(直接加就可以) LimitRequestLine 40940 LimitRequestFieldSize 40940

  5. Java基础 awt Frame 窗体的大小不可调

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  6. http状态码610,613

    610  请求超时 613  dns解析错误

  7. CefSharp中文帮助文档

    https://github.com/cefsharp/CefSharp/wiki/CefSharp%E4%B8%AD%E6%96%87%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A ...

  8. 安装 create-react-app@latest 失败,错误代码:243

    在创建react项目,执行以下命令的时候 npx create-react-app my-app 报错如下: 解决方案: 全局安装即可 npm install -g create-react-app

  9. SQL中merge into用法

    从备份表中更新字段到正式表中,使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用 MERGE INTO 代替 UPDATE 执行批量更新,会提升执行效率. ME ...

  10. Javacript Remove Elements from Array

    參考自: https://love2dev.com/blog/javascript-remove-from-array/ 1. Removing Elements from End of Array ...