| | |
| | | addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid); |
| | | addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username); |
| | | addHeader(mutate, SecurityConstants.USER_TYPE, userType); |
| | | //管理后台记录用户最后一次的操作时间,用于判定30分钟无操作后删除token,退出登录 |
| | | if("system".equals(userType)){ |
| | | addLastTime(userid, url); |
| | | } |
| | | |
| | | // 内部请求来源参数清除 |
| | | removeHeader(mutate, SecurityConstants.FROM_SOURCE); |
| | | return chain.filter(exchange.mutate().request(mutate.build()).build()); |
| | |
| | | private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg) { |
| | | log.error("[鉴权异常处理]请求路径:{}", exchange.getRequest().getPath() + "\n" + msg); |
| | | return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 记录用户最后一次操作的时间 |
| | | * @param userid |
| | | * @param url |
| | | */ |
| | | private void addLastTime(String userid, String url){ |
| | | Object lastTime = redisService.getCacheObject("lastTime:" + userid); |
| | | if(null == lastTime){ |
| | | redisService.setCacheObject("lastTime:" + userid, System.currentTimeMillis()); |
| | | }else{ |
| | | Long last = Long.valueOf(lastTime.toString()); |
| | | //操作登录或者时间差值小于30分钟,写入新的数据到缓存中 |
| | | if("/auth/login".equals(url) || System.currentTimeMillis() - last < 1800000L){ |
| | | redisService.setCacheObject("lastTime:" + userid, System.currentTimeMillis()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |