Spring Security如何在不登录的情况下更新userDetails

时间:2011-09-01 08:37:58

标签: java spring spring-security

我是Spring Security的新手。 我已经实现了UserDetails来创建我自己的用户。我也有我的自定义userDetailsS​​ervice。现在一切正常,但我无需登录即可更新有关用户的信息。如何做到这一点?如何从上下文中接收信息然后进行更改?  提前致谢

1 个答案:

答案 0 :(得分:3)

如果用户未登录,则无法从SecurityContext获取。这是将用户置于上下文中的登录过程。

只需使用UserDetailsS​​ervice加载用户(UDS毕竟只是一个DAO),然后根据需要修改并保存。这将是有用的,例如在管理用例中(例如,管理员纠正了用户名中的拼写错误)。

请告诉我这不是你问的问题。

修改

好的,回应你的评论(我从记忆中做到这一点,所以可能不是100%):

SecurityContext context = SecurityContextHolder.getContext();
Authentication auth = context.getAuthentication();
CustomUser user = (CustomUser) auth.getPrincipal();

如果那不完全正确,那就非常接近。但要小心,因为如果用户实际上没有登录,你将得到一个ClassCastException - 如果激活了Spring Security匿名过滤器,对getPrincipal()的调用将返回一个String“anonymousUser”。您当然可以轻松更新代码以处理这种可能性。