我的Spring应用程序中有以下方法
public static String getCurrentUserStudentId() {
return ((LdapPerson) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getID();
}
这适用于应用程序运行,但是当我运行一个调用此方法的测试时,它会给出
org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken cannot be cast to fi.utu.security.ldap.userdetails.LdapPerson
我对Spring Security并不熟悉所有可能相关的文件,但问我。我希望有人能说出如何做到这一点。
答案 0 :(得分:0)
SecurityContextHolder
在静态变量中保留对“策略”的引用,这意味着此细节从测试泄漏到测试。
您有几种选择:
在测试中,使用其中一个SecurityContextHolder
为getCurrentUserStudentId
创建一个模拟实现,它返回测试的固定结果。
将代码放入bean中,然后注入而不是调用SecurityContextHolder
。实现这个bean的两个版本:一个调用SecurityContextHolder
,另一个调用返回一个字符串。