在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;
}
至此,问题解决
推荐阅读
- 你到家了吗
- 开学第一天(下)
- 闲杂“细雨”
- 杜月笙的口才
- 赢在人生六项精进二阶Day3复盘
- 祖母走了
- 樱花雨
- 眼观耳听美食的日子
- 【故障公告】周五下午的一次突发故障
- Activiti(一)SpringBoot2集成Activiti6