123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package com.nosum.common.util;
- import com.auth0.jwt.JWT;
- import com.auth0.jwt.JWTVerifier;
- import com.auth0.jwt.algorithms.Algorithm;
- import com.auth0.jwt.exceptions.JWTDecodeException;
- import com.auth0.jwt.exceptions.JWTVerificationException;
- import com.nosum.common.base.domain.vo.UserSessionVO;
- import com.nosum.common.constant.Constants;
- import com.nosum.common.context.BeanTool;
- import com.nosum.common.enums.ErrorEnum;
- import com.nosum.deliver.auth.domain.po.AuthToken;
- import com.nosum.deliver.auth.domain.po.AuthUser;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.query.Criteria;
- import org.springframework.data.mongodb.core.query.Query;
- import org.springframework.web.context.request.RequestContextHolder;
- import org.springframework.web.context.request.ServletRequestAttributes;
- import javax.servlet.http.HttpServletRequest;
- import java.time.LocalDateTime;
- import java.util.Objects;
- /**
- * 会话工具类.
- *
- * @author Young
- */
- public class SessionUtil {
- /**
- * 获取用户Session信息
- *
- * @return 用户 Session 信息
- */
- public static UserSessionVO getUserSessionInfo() {
- // 获取请求对象
- HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
- // 获取请求头Token值
- String token = request.getHeader(Constants.AUTHENTICATION);
- if (StringUtils.isBlank(token)) {
- return null;
- }
- // 获取 token 中的 user id
- AuthUser authUser = null;
- try {
- authUser = JsonUtil.parseObject(JWT.decode(token).getAudience().get(0), AuthUser.class);
- } catch (JWTDecodeException e) {
- ExceptionUtil.rollback(ErrorEnum.INVALID_TOKEN);
- }
- MongoTemplate mongoTemplate = BeanTool.getBean(MongoTemplate.class);
- AuthUser user = mongoTemplate.findById(authUser.getId(), AuthUser.class);
- if (user == null) {
- ExceptionUtil.rollback(ErrorEnum.LOGIN_ERROR);
- }
- // 验证 token
- JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
- try {
- jwtVerifier.verify(token);
- } catch (JWTVerificationException e) {
- ExceptionUtil.rollback(ErrorEnum.INVALID_TOKEN);
- }
- long count = mongoTemplate.count(Query.query(Criteria.where("token").is(token).and("userId").is(user.getId()).and("expireTime").gte(LocalDateTime.now())), AuthToken.class);
- if (count == 0) {
- ExceptionUtil.rollback(ErrorEnum.INVALID_TOKEN);
- }
- UserSessionVO userSessionVO = new UserSessionVO();
- userSessionVO.setName(user.getName()).setRoleId(user.getRoleId()).setId(user.getId());
- return userSessionVO;
- }
- }
|