Java 在Spring MVC应用程序中在会话中存储用户对象
我想知道如何通过Spring Security在会话中正确存储和检索我的用户。我正在使用AuthenticationManager。到目前为止,我使用的是我知道不是最干净的以下方法Java 在Spring MVC应用程序中在会话中存储用户对象,java,spring,session,spring-mvc,Java,Spring,Session,Spring Mvc,我想知道如何通过Spring Security在会话中正确存储和检索我的用户。我正在使用AuthenticationManager。到目前为止,我使用的是我知道不是最干净的以下方法 public class UserController { @Autowired private UserService userService; @RequestMapping(value="/myAccount", method=RequestMethod.GET) publi
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value="/myAccount", method=RequestMethod.GET)
public void myAccount(HttpServletRequest request){
//Verify Logged in user
User user = null;
UserProfile loggedinUser = (UserProfile) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if(loggedinUser != null){
user = userService.loadUserByUsername(loggedinUser.getUsername());
}
//Store User in session
Session session = request.getSession(true);
session.setAttribute("user", user);
}
}
我在这里看了一下答案:
但我不完全明白我应该如何实施它。我可以像这样实现我的用户类吗
public class User implements UserDetails {
private String username;
private String password;
private String email;
......
}
public class UserController {
@Autowired
private UserDetailsService userDetailsService;
@RequestMapping(value="/myAccount", method=RequestMethod.GET)
public void myAccount(){
User user = (User)SecurityContextHolder.
getContext().getAuthentication().getPrincipal();
}
}
然后像这样修改我的控制器
public class User implements UserDetails {
private String username;
private String password;
private String email;
......
}
public class UserController {
@Autowired
private UserDetailsService userDetailsService;
@RequestMapping(value="/myAccount", method=RequestMethod.GET)
public void myAccount(){
User user = (User)SecurityContextHolder.
getContext().getAuthentication().getPrincipal();
}
}
据我所知,Spring将自动从数据库加载我的自定义用户并将其存储在会话中
谢谢这取决于您如何处理登录过程。如果您正在实现
AuthenticationProvider
或AuthenticationManager
,那么将主体放入上下文就可以了。另外请注意,您可以只使用@AuthenticationPrincipal
,Spring MVC将主体作为参数传递给控制器方法。感谢您的回复。是的,我正在使用AuthenticationManager。