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

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

package club.zhcs.lina.auth.service;

import java.util.List;
import java.util.regex.Pattern;

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

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;

/**
 * 
 * @author Kerbores([email protected])
 *
 */
public interface AuthService {

    /**
     * 用户登录
     * 
     * @param user
     */
    public void login(AuthUser user);

    /**
     * 获取当前登录用户
     * 
     * @return
     */
    public AuthUser user();

    /**
     * 获取当前登录用户的角色
     * 
     * @return
     */
    public default List roles() {
        if (Lang.isEmpty(user())) {
            return Lang.list();
        }
        return user().getRoles();
    }

    /**
     * 获取当前登录用户的权限
     * 
     * @return
     */
    public default List permissions() {
        if (Lang.isEmpty(user())) {
            return Lang.list();
        }
        return user().getPermissions();
    }

    /**
     * 获取用户名
     * 
     * @return
     */
    public default String userName() {
        if (Lang.isEmpty(user())) {
            return "";
        }
        return user().getUserName();
    }

    /**
     * 认证检查
     * 
     * @param withoutAuthenticationUrlRegulars
     *            不需要检查的url正则表达式
     * @return 认证检查通过状态
     */
    public default boolean authentication(List withoutAuthenticationUrlRegulars) {
        return skip() || pass(getRequest().getRequestURI(), withoutAuthenticationUrlRegulars) || user() != null;
    }

    /**
     * @param uri
     *            请求地址
     * @param withoutAuthenticationUrlRegulars
     *            放行url正则
     * @return 是否放行
     */
    public default boolean pass(String uri, List withoutAuthenticationUrlRegulars) {
        for (String regular : withoutAuthenticationUrlRegulars) {
            if (Pattern.matches(regular, uri)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 是否跳过检查
     * 
     * @return
     */
    public default boolean skip() {
        return false;
    }

    public HttpServletRequest getRequest();

    /**
     * 认证头key
     * 
     * @return
     */
    public default String authorizationHeaderKey() {
        return "Authorization";
    }

    /**
     * token key ,可以接受从header/cookie和请求参数传入
     * 
     * @return
     */
    public default String tokenKey() {
        return "token";
    }

    /**
     * refresh token key ,可以接受从header/cookie和请求参数传入
     * 
     * @return
     */
    public default String refreshTokenKey() {
        return "refreshToken";
    }

    /**
     * 获取token
     * 
     * @return
     */
    public default String token() {
        String token = null;
        Cookie[] cookies = getRequest().getCookies();
        if (cookies != null) {
            for (Cookie ele : cookies) {
                if (Strings.equalsIgnoreCase(ele.getName(), tokenKey())) {
                    token = ele.getValue();
                    if (Strings.isNotBlank(token)) {
                        break;
                    }
                }
            }
        }
        if (Strings.isBlank(token)) {
            token = getRequest().getHeader(authorizationHeaderKey());
        }
        if (Strings.isBlank(token)) {
            token = getRequest().getHeader(tokenKey());
        }
        if (Strings.isBlank(token)) {
            token = getRequest().getParameter(tokenKey());
        }
        return token;
    }

    /**
     * 获取 refresh token
     * 
     * @return
     */
    public default String refreshToken() {
        String refreshToken = null;
        Cookie[] cookies = getRequest().getCookies();
        if (cookies != null) {
            for (Cookie ele : cookies) {
                if (Strings.equalsIgnoreCase(ele.getName(), refreshTokenKey())) {
                    refreshToken = ele.getValue();
                    if (Strings.isNotBlank(refreshToken)) {
                        break;
                    }
                }
            }
        }
        if (Strings.isBlank(refreshToken)) {
            refreshToken = getRequest().getHeader(refreshTokenKey());
        }
        if (Strings.isBlank(refreshToken)) {
            refreshToken = getRequest().getParameter(refreshTokenKey());
        }
        return refreshToken;
    }

    /**
     * 
     */
    public void logout();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy