博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud:Security OAuth2 自定义异常响应
阅读量:6229 次
发布时间:2019-06-21

本文共 2815 字,大约阅读时间需要 9 分钟。

对于客户端开发或者网站开发而言,调用接口返回有统一的响应体,可以针对性的设计界面,代码结构更加清晰,层次也更加分明。

默认异常响应

在使用 Spring Security Oauth2 登录和鉴权失败时,默认返回的异常信息如下:

{  "error": "unauthorized",  "error_description": "Full authentication is required to access this resource"}

这与我们返回的信息格式不一致。如果需要修改这种返回的格式,需要重写相关异常处理类。这里我统一的是资源服务器(网关)的响应格式。

自定义异常响应

无效 token 异常类重写

新增 AuthExceptionEntryPoint.java

@Componentpublic class AuthExceptionEntryPoint implements AuthenticationEntryPoint{    @Override    public void commence(HttpServletRequest request, HttpServletResponse response,                         AuthenticationException authException) throws ServletException {        Map
map = new HashMap
(); Throwable cause = authException.getCause(); response.setStatus(HttpStatus.OK.value()); response.setHeader("Content-Type", "application/json;charset=UTF-8"); try { if(cause instanceof InvalidTokenException) { response.getWriter().write(ResultJsonUtil.build( ResponseCodeConstant.REQUEST_FAILED, ResponseStatusCodeConstant.OAUTH_TOKEN_FAILURE, ResponseMessageConstant.OAUTH_TOKEN_ILLEGAL )); }else{ response.getWriter().write(ResultJsonUtil.build( ResponseCodeConstant.REQUEST_FAILED, ResponseStatusCodeConstant.OAUTH_TOKEN_MISSING, ResponseMessageConstant.OAUTH_TOKEN_MISSING )); } } catch (IOException e) { e.printStackTrace(); } }}

权限不足异常类重写

新增 CustomAccessDeniedHandler.java

@Component("customAccessDeniedHandler")public class CustomAccessDeniedHandler implements AccessDeniedHandler {    @Override    public void handle(HttpServletRequest request, HttpServletResponse response,                       AccessDeniedException accessDeniedException)            throws IOException, ServletException {        response.setStatus(HttpStatus.OK.value());        response.setHeader("Content-Type", "application/json;charset=UTF-8");        try {            response.getWriter().write(ResultJsonUtil.build(                    ResponseCodeConstant.REQUEST_FAILED,                    ResponseStatusCodeConstant.OAUTH_TOKEN_DENIED,                    ResponseMessageConstant.OAUTH_TOKEN_DENIED            ));        } catch (IOException e) {            e.printStackTrace();        }    }}

资源配置类中设置异常处理类

修改资源配置类 ResourceServerConfiguration.java

@Overridepublic void configure(ResourceServerSecurityConfigurer resources) {    resources.tokenExtractor(customTokenExtractor);    resources.authenticationEntryPoint(authExceptionEntryPoint)            .accessDeniedHandler(customAccessDeniedHandler);}

 

自定义响应测试

示例代码

转载于:https://www.cnblogs.com/bndong/p/10275430.html

你可能感兴趣的文章
加载nginx配置
查看>>
PHP 数值
查看>>
springCloud(7):Ribbon实现客户端侧负载均衡-消费者整合Ribbon
查看>>
Delphi 的接口(2) - 第一个例子
查看>>
我的友情链接
查看>>
解析JDK 7的动态类型语言支持
查看>>
微软收取非Windows平板虚拟许可费 阻击iPad
查看>>
JVM JRE JDK 区别
查看>>
python的常用模块
查看>>
apache服务器日志分析程序webalizer
查看>>
Trunk实现不同VLAN之间 相同网段的互通
查看>>
(版本定制)第8课:Spark Streaming源码解读之RDD生成生命周期彻底研究和思考
查看>>
为底层元素注册监听器
查看>>
ZeroTurnaround(做 JRebel 的公司)关于 Java 类动态重载的一系列文章
查看>>
awk级sed处理下一行
查看>>
windows中如何查看本机的MAC地址和主机名
查看>>
Javascript 中的上下文
查看>>
raid 相关收集
查看>>
选购邮件系统五大指标看U-Mail对比国际大牌
查看>>
3. JDK Map
查看>>