我有一个运行良好的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中找不到身份验证对象