【发布时间】:2020-03-04 11:05:36
【问题描述】:
我有一个运行良好的 Spring Boot 控制器,并且有以下声明:
@RestController
@RequestMapping("/api/our")
@PreAuthorize(value = "hasRole('ROLE_USER')")
@Api(value="our", produces="Our data")
public class OurController {
当我对我们的代码运行 Fortify 静态分析工具时,它抱怨我们的服务类说:
如果没有适当的访问控制,OurService.java 中的方法 findAll() 可以在第 36 行执行包含攻击者控制的主键的 SQL 语句,从而允许攻击者访问未经授权的记录。
所以我尝试将@PreAuthorize 注解添加到我们的服务类中,如下所示:
@Service
@PreAuthorize(value = "hasRole('ROLE_USER')")
public class OurService {
private final OurRepository ourRepository;
public OurService(OurRepository ourRepository) {
this.ourRepository = ourRepository;
}
public Page<Our> findAll(Pageable pageable) {
return ourRepository.findAll(pageable);
}
public Page<Our> findAll(Specification<Our> specification, Pageable pageable) {
return ourRepository.findAll(specification, pageable);
}
}
但是在启动我们的应用程序时,它失败了,出现以下异常:
原因:org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在SecurityContext中找不到Authentication对象
【问题讨论】:
标签: java spring spring-boot spring-security fortify