栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

loginInterceptor拦截了请求头token

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

loginInterceptor拦截了请求头token

原因:
实际上发送了两次请求,第一次为options请求,第二次才get/post…请求
在options请求中,不会携带请求头的参数,所以在拦截器上获取请求头为空,自定义的拦截器拦截成功
第一次请求不能通过,就不能获取第二次的请求了get/post…
第一次请求不带参数,第二次请求才带参数

解决方案: 添加 if 这段代码快即可
后面的代码我是用来判断用户是否登入和判断token令牌是否过期
拦截器

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
            System.out.println("OPTIONS请求,放行");
            return true;
        }
        
        String token = request.getHeader("token");
        if(ObjectUtils.isEmpty(token)) {    //这里是判断用户是否登入
            throw new NullTokenException("你还未登入,请登入");
        }
        String name = TokenManger.parseUserNameFromToken(token);   //这个是用于判断令牌过期
        return true;
    }

注册拦截器并放行一些资源。 其实下面所有的代码无关标题

package com.chao.config;

import com.chao.intercepter.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
//@Profile("prod")    该注解是说:该配置只在prod环境下生效
public class WebMvcConfig implements WebMvcConfigurer {
    @Autowired
    LoginInterceptor loginInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
                .excludePathPatterns("/sys/login")
                .excludePathPatterns("/doc.html", "/oss/upload","/excel/uploadEmployee",
                        "/swagger-resources/**", "/webjars/**", "/v2/**");
    }
}

自定义异常

public class NullTokenException extends Exception{
    public NullTokenException() {
        super();
    }

    public NullTokenException(String message) {
        super(message);
    }
}

捕获全局异常

package com.chao.advice;

import com.chao.exception.NullTokenException;
import com.chao.uilts.CR;
import io.jsonwebtoken.ExpiredJwtException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
@ResponseBody
//处理全局异常
public class ExceptionAdvice {

    @ExceptionHandler(ExpiredJwtException.class)
    public CR handleExpiredJwtException(ExpiredJwtException e){
        return CR.error("501","用户信息已过期,请重新登入");
    }

    @ExceptionHandler(NullTokenException.class)
    public CR handleNullTokenException(NullTokenException e){
        return CR.error("502",e.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public CR handleException(Exception e){
        return CR.error("500","服务器出错.....");
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337453.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号