我是Spring Security的新手。 我已经实现了UserDetails来创建我自己的用户。我也有我的自定义userDetailsService。现在一切正常,但我无需登录即可更新有关用户的信息。如何做到这一点?如何从上下文中接收信息然后进行更改? 提前致谢
答案 0 :(得分:3)
如果用户未登录,则无法从SecurityContext获取。这是将用户置于上下文中的登录过程。
只需使用UserDetailsService加载用户(UDS毕竟只是一个DAO),然后根据需要修改并保存。这将是有用的,例如在管理用例中(例如,管理员纠正了用户名中的拼写错误)。
请告诉我这不是你问的问题。
修改强>
好的,回应你的评论(我从记忆中做到这一点,所以可能不是100%):
SecurityContext context = SecurityContextHolder.getContext();
Authentication auth = context.getAuthentication();
CustomUser user = (CustomUser) auth.getPrincipal();
如果那不完全正确,那就非常接近。但要小心,因为如果用户实际上没有登录,你将得到一个ClassCastException - 如果激活了Spring Security匿名过滤器,对getPrincipal()的调用将返回一个String“anonymousUser”。您当然可以轻松更新代码以处理这种可能性。