背景
有数据文件是存储在服务器中应用的中文名,而数据库中对应保留了这些文件对应的存储门路,咱们应用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; }
至此,问题解决