关于springboot:在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;
    }

至此,问题解决

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理