Soul网关-day07

Soul网关-day07

Soul-plugin-sofa测试(二)

​ 在day05的时候,出现了一个bug,是由于2.2.1的版本没有sofa相关的插件;所以更新到了最新的版本,但最新版本在运行过程中报了一个错误,就是:

o.d.s.a.shiro.bean.StatelessAuthFilter   : token is null.

​ 可以看到是在StatelessAuthFilter处:

public class StatelessAuthFilter extends AccessControlFilter {
    private static final String HEAD_TOKEN = "X-Access-Token";

    @Override
    protected boolean onAccessDenied(final ServletRequest servletRequest, final ServletResponse servletResponse)
            throws Exception {
        ....省略其他代码
        String tokenValue = httpServletRequest.getHeader(HEAD_TOKEN);
        if (StringUtils.isBlank(tokenValue)) {
            log.error("token is null.");
            unionFailResponse(servletResponse);
            return false;
        }
            ...省略其他代码
    }

}

可以看到这里是从我们的请求request上找到一个叫X-Access-Token的东西,debug了一下发现为null
在这里插入图片描述

用postman测试下soul-admin的登录接口,看看是否真正的生成了token,可以得到以下的json数据:

{
    "code": 200,
    "message": "login dashboard user success",
    "data": {
        "id": "1",
        "userName": "admin",
        "password": "jHcpKkiDbbQh7W7hh8yQSA==",
        "role": 1,
        "enabled": true,
        "dateCreated": "2018-06-23 15:12:22",
        "dateUpdated": "2018-06-23 15:12:23",
        "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTYxMTIxMzY0NX0.T3O900IOBcHHHRY9uWP46IhgDZXdaAXru2-bAbMq898"
    }
}

​ 可以看出我们的登录请求生成了token的数据。

​ 那么随便找一个报token为null的 接口 在postman进行测试,这里选择:

在这里插入图片描述

User这个接口,访问的请求是:http://localhost:9095/dashboardUser?currentPage=1&pageSize=12,在Headers中加入soul-admin需要鉴权的属性:X-Access-Token,并将login请求得到的token值赋给这个Headers属性。

​ 不同于我soul-admin控制台报401错误,可以正常的得到结果,结果如下:

{
    "code": 200,
    "message": "query success",
    "data": {
        "page": {
            "currentPage": 1,
            "prePage": 1,
            "nextPage": 1,
            "pageSize": 12,
            "offset": 0,
            "totalPage": 1,
            "totalCount": 1
        },
        "dataList": [
            {
                "id": "1",
                "userName": "admin",
                "password": "123456",
                "role": 1,
                "enabled": true,
                "dateCreated": "2018-06-23 15:12:22",
                "dateUpdated": "2018-06-23 15:12:23"
            }
        ]
    }
}

​ 那么可以猜测可能是在存token的时候出了问题,因为既然程序需要从request中得到X-Access-Token这个属性,那么在组建对后端请求的时候不可能不会携带这个token。

​ 而目前出现的错误是,在StatelessAuthFilter这个类中,判断是否拒绝请求的方法**onAccessDenied(final ServletRequest servletRequest, final ServletResponse servletResponse)**时,取出来的token为空。

​ 所以才会通过**unionFailResponse(servletResponse)**这个类,往我们请求的response结果中塞入请求失败的信息。

​ …To BeContinue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值