arranque de primavera: construya un proyecto desde cero - day8 implementa la verificación jwtToken

No es hacer ejercicio solo para comer más comida deliciosa: fui al gimnasio y abrí una bolsa de papas fritas =-=

arranque de primavera: construya un proyecto desde cero - day8 implementa la verificación jwtToken


Tos, el libro continúa desde arriba, aunque kisso es fácil de usar, pero el applet no lo admite, ¿qué pasa? Comienza el plan A en mi corazón: ¡escribir a mano!

1. Generar token

La introducción de jwtToken está aquí
Aquí usamos directamente el método kisso anterior.

// 生成 jwt 票据,访问请求头设置‘ accessToken=票据内容 ’
String jwtToken = SSOToken.create().setId(user.getId()).setIssuer(user.getNickName()).getToken();

No hay mucha comparación, la principal ventaja es que hay una decodificación lista para usarSSOToken ssoToken = SSOToken.parser(jwtToken);

2. Reescribe el interceptor

extends HandlerInterceptorAdapterSimplemente cree una clase , herede este tipo de preHandle()método de reescritura y, por supuesto, WebMvcConfigurationSupportregístrelo en la subclase.

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        //获取访问的方法
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
		//获取免登注解
        IgnoreLogin ignoreLogin = method.getAnnotation(IgnoreLogin.class);

        //忽略注解
        if(ignoreLogin != null){
    
    
            return true;
        }

        Result result = new Result();

        //从header中获取token
        String token = request.getHeader(GeneralAttributes.TOKEN_AUTH_VALIDATE);

        //验证token是否有效
        boolean flag = false;
        try {
    
    
            flag = iTokenService.checkToken(token);
        }catch (Exception e){
    
    
            response.setStatus(GeneralAttributes.RESULT_ERROR);
            logger.error(e.getMessage());
        }
        if (!flag){
    
    
            result.setCode(GeneralAttributes.TOKEN_TIMEOUT_ERROR);
            result.setMsg("token已过期");
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");

            response.getWriter().write(JSON.toJSONString(result));
            response.getWriter().flush();
            return false;
        }
        return true;
    }

Mirando el objeto en el código IgnoreLogin, se ignora la anotación de inicio de sesión. A través de esta anotación, se puede omitir la etapa de verificación del token. Generalmente se usa para el inicio de sesión y otras interfaces que no han iniciado sesión o que no necesitan ser autenticadas. El código específico es el siguiente:

package com.dingx.personal.common.annontation;

import java.lang.annotation.*;

/**
 * 忽略Token验证
 * @author dingx
 * @date 2020年6月9日 22:25:41
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface IgnoreLogin {
    
    

}

@Target: @Target explica el rango de objetos modificados por Annotation: Annotation se puede usar para paquetes, tipos (clases, interfaces, enumeraciones, tipos de anotación), miembros de tipos (métodos, constructores, variables de miembros, valores de enumeración), parámetros de métodos y variables locales (como variables de bucle, parámetros de captura). El uso de target en la declaración del tipo de Anotación puede aclarar más claramente el objetivo de su modificación.
@Retention: Anotación @Retención puede usarse para modificar anotaciones, que son anotaciones de anotaciones, llamadas meta-anotaciones.
Según el ciclo de vida, se puede dividir en 3 categorías:
1. RetentionPolicy.SOURCE: la anotación solo se mantiene en el archivo fuente, cuando el archivo Java se compila en un archivo de clase, la anotación se abandona
2. RetentionPolicy. CLASE: la anotación se conserva en el archivo de clase, pero se abandona cuando jvm carga el archivo de clase, que es el ciclo de vida predeterminado 3.
RetentionPolicy.RUNTIME: la anotación no solo se guarda en el archivo de clase, sino que aún existe después de que jvm cargue el archivo de clase; :
@Documentedla anotación documentada indica que esta anotación es creada por javadoc Logging tiene una función de registro similar de forma predeterminada. Si una declaración de tipo se documenta con anotaciones, sus anotaciones pasan a formar parte de la API pública.

———————————————————————————————————————————————————— ———————————————————————————————————————————————————— —————————————
PS un poco ocupado. Y realmente no hay talento de front-end. . . La escritura frontal es demasiado lenta qaq. .

おすすめ

転載: blog.csdn.net/qq_16253859/article/details/106390999