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

背景
【在SpringBoot下升级shiro之后导致中文路径400非法的解决方案】有数据文件是存储在服务器中使用的中文名,而数据库中对应保存了这些文件对应的存储路径,我们使用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; }

至此,问题解决

    推荐阅读