66 votes

Obtenir UserDetails objet de Contexte de Sécurité dans Spring MVC contrôleur

Je suis l'aide de Printemps de Sécurité 3 et Spring MVC 3.05.

Je voudrais imprimer nom d'utilisateur de l'utilisateur actuellement connecté,comment puis-je récupérer UserDetails dans mon Contrôleur?

@RequestMapping(value="/index.html", method=RequestMethod.GET)
    public ModelAndView indexView(){
         UserDetails user = ?
                mv.addObject("username", user.getUsername());
        ModelAndView mv = new ModelAndView("index");
        return mv;
    }   

119voto

sourcedelica Points 12533

Si vous connaissez déjà pour assurer que l'utilisateur est connecté (dans votre exemple, si /index.html est protégé):

UserDetails userDetails =
 (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

De vérifier d'abord si l'utilisateur est connecté, vérifiez que le courant en Authentication n'est pas un AnonymousAuthenticationToken.

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
        // userDetails = auth.getPrincipal()
}

32voto

Farm Points 635

Laissez Printemps 3 injection de prendre soin de cela.

Grâce à tsunade21 la façon la plus simple est:

 @RequestMapping(method = RequestMethod.GET)   
 public ModelAndView anyMethodNameGoesHere(Principal principal) {
        final String loggedInUserName = principal.getName();

 }

4voto

L'sync Points 34

Si vous voulez juste pour imprimer le nom d'utilisateur sur les pages, peut-être que vous aimerez cette solution. Il est libre de l'objet castings et fonctionne sans Ressort de la Sécurité:

@RequestMapping(value = "/index.html", method = RequestMethod.GET)
public ModelAndView indexView(HttpServletRequest request) {

    ModelAndView mv = new ModelAndView("index");

    String userName = "not logged in"; // Any default user  name
    Principal principal = request.getUserPrincipal();
    if (principal != null) {
        userName = principal.getName();
    }

    mv.addObject("username", userName);

    // By adding a little code (same way) you can check if user has any
    // roles you need, for example:

    boolean fAdmin = request.isUserInRole("ROLE_ADMIN");
    mv.addObject("isAdmin", fAdmin);

    return mv;
}

Note "HttpServletRequest request" paramètre ajouté.

Fonctionne bien parce que le Printemps injecte ses propres objets (les enveloppes) pour HttpServletRequest, Principale etc., ainsi, vous pouvez utiliser les méthodes de java pour récupérer les informations de l'utilisateur.

1voto

amit Points 47

si vous r à l'aide de printemps de sécurité alors que nous pouvons obtenir le courant de l'utilisateur connecté par

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
     String name = auth.getName(); //get logged in username

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X