springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)

在网关验证token失败时,往往我们需要返回统一的格式处理,在上一篇中,是oauth2定义的格式

springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)_第1张图片

就像上面这种格式,我们需要改变这个格式,改造成下面的格式

springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)_第2张图片

 

其实很简单,只需要在网关加入配置类就可以,建立一个exception包并创建AuthExceptionEntryPoint.java类

springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)_第3张图片

springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)_第4张图片

package com.study.vcloud.zuul.exception;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.MediaType;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 
 * @date 2019/7/10 11:27
 * @description: 自定义Token异常信息,用于tokan校验失败返回信息,比如token过期/验证错误
 */
public class AuthExceptionEntryPoint implements AuthenticationEntryPoint {

    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws ServletException {
        Map map = new HashMap();
        map.put("code", "401");
        map.put("message", "token非法");
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        try {
            ObjectMapper mapper = new ObjectMapper();
            mapper.writeValue(response.getOutputStream(), map);
        } catch (Exception e) {
            throw new ServletException();
        }
    }
}

然后在配置类上加上这个异常

springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)_第5张图片

启动测试

当token不合法时就会报下面的错

springcloud集成Oauth2权限项目-网关校验access_token失败返回统一格式(十二)_第6张图片

项目地址:https://github.com/James-Pan0525/vcloud.git

你可能感兴趣的:(springcloud)