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

club.zhcs.lina.auth.service.DefaultAuthService Maven / Gradle / Ivy

package club.zhcs.lina.auth.service;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import javax.annotation.Nonnull;

import org.nutz.lang.Lang;
import org.nutz.lang.Strings;

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

import club.zhcs.lina.auth.jwt.JWTGenerator;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;

/**
 * 
 * @author Kerbores([email protected])
 *
 */
@RequiredArgsConstructor
public class DefaultAuthService implements AuthService {

    private final JWTGenerator jwtGenerator;
    private final HttpServletRequest request;
    private final UserDetailService userDetailService;

    LoadingCache cache = CacheBuilder.newBuilder()
                                                       .concurrencyLevel(8)
                                                       .expireAfterAccess(10, TimeUnit.MINUTES)
                                                       .initialCapacity(10)
                                                       .maximumSize(300)
                                                       .recordStats()
                                                       .build(new CacheLoader() {

                                                           @Override
                                                           public AuthUser load(@Nonnull String key) throws Exception {
                                                               return userDetailService.userByName(key);
                                                           }
                                                       });

    /**
     * @return
     * @see club.zhcs.lina.auth.service.auth.AuthService#user()
     */
    @Override
    public AuthUser user() {
        try {
            String user = userName();
            if (Strings.isBlank(user)) {
                return null;
            }
            return cache.get(user);
        }
        catch (ExecutionException e) {
            throw Lang.wrapThrow(e);
        }
    }

    /**
     * @return
     * @see club.zhcs.lina.auth.service.auth.AuthService#userName()
     */
    @Override
    public String userName() {
        return jwtGenerator.verifiedSubject(token());
    }

    /**
     * @return
     * @see club.zhcs.lina.auth.service.auth.AbstractAuthService#getRequest()
     */
    @Override
    public HttpServletRequest getRequest() {
        return request;
    }

    @Override
    public void login(AuthUser user) {
        // do nothing
    }

    @Override
    public void logout() {
        // do nothing
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy