春季安全性:具有某些映射的SecurityContext空身份验证

时间:2018-12-03 12:40:54

标签: spring security pdf

我在使用Spring Security和一些URL时遇到了麻烦。

这是方案: 春季启动2.1.0 Spring Security 5.1.1

我正在使用带有登录名等的标准安全配置。我还对PreAuthorize的{​​{1}}中的RequestMapping拥有一些角色和权限。没问题一切正常。

该问题出现在某些映射上。我给你看一个例子:

Controller

此URL以PDF格式而不是HTML页面返回报告。

我收到此错误消息:

@RequestMapping(value = "/codigo/{barcode}.pdf")
@ResponseBody
@PreAuthorize("hasAnyRole({'ROLE_ADMIN','ROLE_USER'})")
public void codigo(HttpServletRequest request, HttpServletResponse response, @PathVariable(required = true, name = "barcode") String barcode) {
...
}

如果我添加一些代码来检查安全上下文

AuthenticationCredentialsNotFoundException: An Authentication object was not found in the Security Context

这就是我得到的:

SecurityContext ctx = SecurityContextHolder.getContext();
Logger.getLogger(InformesController.class.getName()).log(Level.WARNING, "Context: {0}", ctx);

我尝试了不同的组合以使一种有效。结果是:

  

@RequestMapping(value =“ /codigo/{barcode}.pdf”):空身份验证

     

@RequestMapping(value =“ / codigo / {barcode}”):如果{barcode}为   'something.pdf'(或.txt或其他扩展名)->空   认证

     

@RequestMapping(value =“ / codigo / {barcode}”):如果{barcode}为   “某事”没事。

我已经在Firefox和Chrome中对此进行了测试,以确保这不是浏览器问题,并且得到了相同的结果。

作为一种变通办法,我正在使用无扩展方法,因为它一直在工作,但是我想知道是否有避免这种情况的方法,或者想知道为什么会发生这种情况。

0 个答案:

没有答案