> 文档中心 > 使用Shiro等安全框架不拦截验证Get方式下的token/Get方式下会拦截验证token问题

使用Shiro等安全框架不拦截验证Get方式下的token/Get方式下会拦截验证token问题

前言:这个问题其实挺基础的,但自己还是费了一点时间,特此记录下,在使用Shiro后post拦截和放行都没有问题,唯独在以get方法下载图片等在不需要token验证的方式下一直被拦截

文章目录

    • 错误示例
    • 正确示例(一)
    • 正确示例(二)

错误示例

Controller代码
说明:这里是用get拼接路径的方式指定参数,也就是使用@PathVariable注解

@ApiOperation(value = "下载图片接口",notes = "下载图片接口")    @RequestMapping(value="/valuePerPhoto2/{fileName}",method = RequestMethod.GET)    public void valuePerPhoto2(HttpServletResponse response,@PathVariable(value = "fileName") String fileName){ log.info("fileName:"+fileName);    }

Shiro安全框架中对拦截路径的配置部分代码
说明:而在配置拦截路径时只到接口方法名,有经验的人应该看出来这里是有问题的

filterChainMap.put("/download/valuePerPhoto2","anon");/* 下载接口 */

测试结果
在这里插入图片描述
断点
说明:在自定义过滤器类中可以明显看到这个接口有被拦截的,token为null是因为我没有传token
在这里插入图片描述

正确示例(一)

修改Shiro配置路径,追加/ **

filterChainMap.put("/download/valuePerPhoto2/**","anon");/* 下载接口 */

测试结果

在这里插入图片描述
在这里插入图片描述

因为下载图片等特定接口要获取到文件后缀名,使用上面@PathVariable注解不好处理,可以切换成@RequestParam注解来获取入参参数

正确示例(二)

修改Controller层代码

@ApiOperation(value = "下载图片接口",notes = "下载图片接口")    @RequestMapping(value="/valuePerPhoto2",method = RequestMethod.GET)    public void valuePerPhoto2(HttpServletResponse response,@RequestParam(value = "fileName") String fileName){ log.info("fileName:"+fileName);    }

修改Shiro拦截路径配置,去掉/ **

filterChainMap.put("/download/valuePerPhoto2","anon");/* 下载接口 */

测试结果
说明:注意这里是传请求参数,get方式下路径后面是?fileName=2222222
在这里插入图片描述
在这里插入图片描述