本文的环境是参考这篇《Spring Cloud OAuth2 实现用户认证及单点登录”》搭建的。

问题描述

请求401_请求401的原因_请求405是什么意思

当前已经获取到了access_token,根据access_token请求自己的接口时报了401,token验证有问题。

我自己的接口是:

/**
     * 一个 RESTful 方法,只有当访问用户具有 ROLE_ADMIN 权限时才能访问,否则返回 401 未授权。
     *
     * 通过 Authentication 参数或者 SecurityContextHolder.getContext().getAuthentication() 可以拿到授权信息进行查看。
     * @param authentication
     * @return
     */
    @GetMapping("get")
    @PreAuthorize("hasAnyRole('ROLE_ADMIN')")
    public Object get(Authentication authentication){
        authentication.getCredentials();
        OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails();
        String token = details.getTokenValue();
        return token;
    }

解决方式

org.springframework.security.oauth2.provider.token.RemoteTokenServices

我们将这个类复制出来,在java下创建相同的包名,类。

请求401_请求405是什么意思_请求401的原因

源码图

在源码中,这里返回的active应该得为Boolean类型,但是这个map的值是个Object,返回直接返回了个String类型。

他使用了Boolean和String类型进行比较,所以我得到的返回结果永远都是false了,就一直走了这个异常。(具体他为什么会这样来比较,我真不太懂,欢迎大佬们在评论里指点一下)

请求401_请求405是什么意思_请求401的原因

修改后的图

那么我的处理就比较简单粗暴了,直接把这个类提出来,然后把这个Boolean.TRUE.toString()一下。类型一致,比较就正常了。

再次去请求,现在就没有问题了,返回成功

请求401_请求401的原因_请求405是什么意思

本文只是个人在学习过程中的一次排查处理过程,如果有更好的见解欢迎大佬们指点。

限时特惠:本站每日持续更新海内外内部创业教程,一年会员只需88元,全站资源免费下载点击查看详情
站长微信:nnxmw123