Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring MVC应用程序中在会话中存储用户对象_Java_Spring_Session_Spring Mvc - Fatal编程技术网

Java 在Spring MVC应用程序中在会话中存储用户对象

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

我想知道如何通过Spring Security在会话中正确存储和检索我的用户。我正在使用AuthenticationManager。到目前为止,我使用的是我知道不是最干净的以下方法

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。