将用户添加到会话,弹出安全性默认登录

我已设置spring security以正确拦截并使用自定义登录页面提示用户,然后正确进行身份validation并将用户详细信息添加到SecurityContextHolder。

补充一点,我现在想要在执行登录时添加我自己的自定义User对象添加到会话中; 所以代码看起来像这样:

public returnwhat? doMySupplementaryLogin() { UserDetails principal = (UserDetails) SecurityContextHolder.getContext() .getAuthentication().getPrincipal(); MyUser user = myUserService.getMyUser(principal.getUsername()); add user to what ? } 

这段代码会在哪里? 我希望执行nomral spring身份validation,然后上面的代码将MyUser对象放入会话,然后将用户发送到原始拦截的url / viewname。 我有强烈的感觉,我使事情变得比他们需要的更复杂……

你确实让它变得复杂…… 🙂

您想要的是向spring的普通身份validation管理器添加自定义身份validation提供程序。 因此,您将配置身份validation管理器,如下所示:

        

现在,您只需要在spring上下文中定义authServiceImpl bean。 你可以通过xml或注释(我喜欢的方式)来做到这一点。

 @Service public class AuthServiceImpl implements AuthService { 

您需要实现AuthService接口。 只需从界面实现方法 – 应该非常简单。 你不需要自己把东西放进SecurityContextHolder– spring会这样做。

你想要的是这个:

 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { return MyUser user = myUserService.getMyUser(username); } 

如果您有任何其他问题,请随时询问。

编辑:或者你可以让你的UserService类实现接口 – 我只是这样做,因为你没有提供你的UserService类。