有一个应用程序,其中 Spring Security 配置用于用户身份验证。我需要在应用程序中获得身份验证用户的任何位置,SecurityUtility.getAuthenticatedUser()
都会给我; SecurityUtility类是这样的:
public class SecurityUtility {
public static Integer getAuthenticatedUserId() {
try {
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Integer PersonelId = null;
if (user.getPersonel() != null)
PersonelId = user.getId();
else
PersonelId = 1;
return PersonelId;
} catch (Exception ex) {
return 1;
}
}
public static User getAuthenticatedUser() {
try {
return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
} catch (Exception ex) {
return new User(1);
}
}
}
有必要提及的是,SecurityUtility
类在应用程序中的使用次数超过500次。。
由于 SSO(单点登录)之类的原因,该应用程序必须同时运行在使用 Spring Security 配置的单一模式下,就像正常运行一样并作为 SSO(单点登录)的一部分。由于 SSO ,我必须在 Spring Security 旁边配置 OAuth2 。根据生产模式(单个或sso),该应用程序以其自己的安全层(Spring Security或OAuth2)运行。
我的问题
当应用程序在Spring Security的单模式下运行时,可以,并且没有问题,但是在SSO模式下运行时,SecurityUtility.getAuthenticatedUser()
不会以User
对象的形式返回结果,返回username
作为字符串。
那么,如何解决我可以在OAuth2模式下获得与Spring Security模式下相同的身份验证用户的问题?
是否有可能或者我必须更改SecurityUtility类。
有必要提及的是,在使用Spring Security运行应用程序时,SecurityContextHolder.getContext().getAuthentication()
方法中SecurityUtility
的类型为org.springframework.serurity.authentication.UsernamePasswordAuthenticationToken
,而当应用程序使用Spring Security运行时,其类型为org.springframework.serurity.oauth2.provider.OAuth2Authentication
。应用程序使用OAuth2运行