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

net.matrix.web.http.servlet.TokenMx Maven / Gradle / Ivy

/*
 * 版权所有 2024 Matrix。
 * 保留所有权利。
 */
package net.matrix.web.http.servlet;

import java.util.UUID;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;

/**
 * 在 HTTP 会话中设置唯一标识,判断 HTTP 请求是否有效。
 */
@ThreadSafe
public final class TokenMx {
    /**
     * 阻止实例化。
     */
    private TokenMx() {
    }

    /**
     * 生成唯一标识。
     *
     * @param request
     *     HTTP 请求。
     * @param key
     *     键名。
     * @return 唯一标识。
     */
    @Nonnull
    public static String generateToken(@Nonnull HttpServletRequest request, @Nonnull String key) {
        HttpSession session = request.getSession();

        String token = UUID.randomUUID().toString();
        session.setAttribute(key, token);
        return token;
    }

    /**
     * 获取已有唯一标识。
     *
     * @param request
     *     HTTP 请求。
     * @param key
     *     键名。
     * @return 唯一标识。
     */
    @Nullable
    public static String getToken(@Nonnull HttpServletRequest request, @Nonnull String key) {
        HttpSession session = request.getSession(false);
        if (session == null) {
            return null;
        }

        return (String) session.getAttribute(key);
    }

    /**
     * 判断唯一标识是否有效。
     *
     * @param request
     *     HTTP 请求。
     * @param key
     *     键名。
     * @return 是否有效。
     */
    public static boolean checkToken(@Nonnull HttpServletRequest request, @Nonnull String key) {
        HttpSession session = request.getSession(false);
        if (session == null) {
            return false;
        }

        String requestToken = request.getParameter(key);
        if (requestToken == null) {
            return false;
        }

        String token = (String) session.getAttribute(key);
        return requestToken.equals(token);
    }

    /**
     * 删除唯一标识。
     *
     * @param request
     *     HTTP 请求。
     * @param key
     *     键名。
     */
    public static void removeToken(@Nonnull HttpServletRequest request, @Nonnull String key) {
        HttpSession session = request.getSession(false);
        if (session == null) {
            return;
        }

        session.removeAttribute(key);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy