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

本文档记录了在使用Shiro安全框架时遇到的一个问题,即GET请求的图片下载接口被拦截,导致无法正常下载。通过分析错误示例,发现Shiro配置的拦截路径不正确。解决方案包括在配置中添加`/**`通配符,或者修改Controller层代码,使用@RequestParam注解来获取参数。经测试,这两种方法都能使下载接口成功绕过拦截。
摘要由CSDN通过智能技术生成

前言:这个问题其实挺基础的,但自己还是费了一点时间,特此记录下,在使用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
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值