All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.youm.frame.security.context.CurrentUserContext Maven / Gradle / Ivy

package me.youm.frame.security.context;

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import me.youm.frame.common.context.ReactiveRequestContextHolder;
import me.youm.frame.common.entity.TokenInfo;
import me.youm.frame.common.exception.TokenException;
import me.youm.frame.common.utils.SecurityUtil;
import reactor.core.publisher.Mono;

import java.io.Serializable;

/**
 * @author youta
 */
public class CurrentUserContext implements Serializable {

    private static final String USER_SESSION_ID = "user";


    public static SaTokenInfo login(String username) {
        StpUtil.login(username);
        return StpUtil.getTokenInfo();
    }

    public static void logout() {
        if (StpUtil.isLogin()){
            StpUtil.logout();
        }
    }


    public static Mono reactiveUser() {
        return ReactiveRequestContextHolder.getExchange()
                .map(SecurityUtil::getToken)
                .onErrorResume(Mono::error)
                .map(StpUtil::getTokenSessionByToken)
                .map(CurrentUserContext::tokenSession)
                ;
    }


    private static TokenInfo tokenSession(SaSession tokenSession){
        TokenInfo model = tokenSession.getModel(USER_SESSION_ID, TokenInfo.class);
        if (model == null)
            throw new TokenException("Token has expired");
        return model;
    }

    public static void user(TokenInfo user) {
        SaSession saSession = StpUtil.getTokenSessionByToken(user.getAccessToken());
        saSession.set(USER_SESSION_ID, user);
    }

    public static TokenInfo refresh(String access_token) {
        StpUtil.checkActivityTimeout();
        StpUtil.updateLastActivityToNow();
        SaSession saSession = StpUtil.getTokenSessionByToken(access_token);
        TokenInfo user = saSession.getModel(USER_SESSION_ID, TokenInfo.class);
        long timeout = saSession.getTimeout();
        user.setExpiresIn(timeout);
        saSession.set(USER_SESSION_ID, user);
        return user;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy