关于springboot:在SpringBoot下升级shiro之后导致中文路径400非法的解决方案

113次阅读

共计 641 个字符,预计需要花费 2 分钟才能阅读完成。

背景

有数据文件是存储在服务器中应用的中文名,而数据库中对应保留了这些文件对应的存储门路,咱们应用 SpringBoot 的动态资源映射时默认会被 shiro 拦挡,并且有的状况下咱们也须要对文件的拜访进行认证权限拦挡。所以咱们的拜访的门路是会通过 shiro 的拦挡,而 shiro1.7 之后的版本对中文门路都进行了非法拦挡,因此中文门路会报 400 异样。

源码剖析

InvalidRequestFilter
这是一个 Shiro 在 springboot 中默认配置的全局过滤器,作用是拦挡过滤非法字符的 Url,这个过滤器会间接把中文字符是为非法,从而拦挡申请,返回错误代码 400。

解决方案

鉴于背景与源码剖析,晓得是因为 shiro 降级 1.7 之后 InvalidRequestFilter 对中文门路进行了非法校验,而起关键作用的属性为 blockNonAscii,因而咱们在 SpringBoot 中注入 shiro 框架的时候从新定义 InvalidRequestFilter 并将 blockNonAscii 设置为 false

    @Bean
    public InvalidRequestFilter invalidRequestFilter(){InvalidRequestFilter invalidRequestFilter = new InvalidRequestFilter();
        invalidRequestFilter.setBlockNonAscii(false);
        return invalidRequestFilter;
    }

至此,问题解决

正文完
 0