SpotBugs标记为不安全的Spring依赖项注入

oalqel3c  于 2022-10-23  发布在  Spring
关注(0)|答案(1)|浏览(224)

有没有更好的打针方法?

@Service
public class CountryServiceImpl implements CountryService {

    private final UserSessionService userSessionService;

    public CountryServiceImpl(final UserSessionService userSessionService) {
        this.userSessionService = userSessionService; // SpotBugs warning
    }

}

SpotBugs在标记的行上给了我一个警告:
此代码将对外部可变对象的引用存储到该对象的内部表示形式中。如果示例被不受信任的代码访问,并且对可变对象的未经检查的更改会危及安全性或其他重要属性,则需要做一些不同的操作。在许多情况下,存储对象的副本是更好的方法。
@Autowired应该是最后一个选项,因为它消除了在集成测试期间注入模拟Bean的能力。

kcwpcxri

kcwpcxri1#

正如SpotBugs建议的那样,您只需创建userSessionService参数的副本(作为新对象),然后将该参数直接赋值给它:

public CountryServiceImpl(final UserSessionService userSessionService) {
       UserSessionService tempUserSessionService = new UserSessionService(userSessionService.getFirst(),
                userSessionService.getSecond() [...])
       this.userSessionService = tempUserSessionService; 
}

相关问题