我需要在非默认的Spring链中检索完全主体对象(不在控制器中使用主注入)。我正在用我的spring-websocket和客户端实现一些拦截器,以从oauth标头令牌值设置用户Principal。春季安全检索主体对象
现在的主要问题是,我不能直接抓取主体对象,而是获取用户名字符串。
我创造了这个方法,但它返回的字符串(获得抛出ClassCastException):
public Principal setApplicationAuthentication(String username) {
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
Authentication auth = new UsernamePasswordAuthenticationToken(userDetails.getUsername(),
userDetails.getPassword(), userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
return (Principal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
如果您在'@ Controller'里面,你可以添加'Authentication'作为方法参数,并且Spring会注入它。 –