sirve requestmapping que para mvc modelandview formulario espaƱol ejemplo arquitectura java spring spring-mvc spring-security

java - requestmapping - Obtiene el objeto UserDetails del contexto de seguridad en el controlador Spring MVC



spring jsp (5)

Deje que la inyección de Spring 3 se encargue de esto.

Gracias a tsunade21 la forma más fácil es:

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

Estoy usando Spring Security 3 y Spring MVC 3.05.

Me gustaría imprimir el nombre de usuario de usuario actualmente conectado, ¿cómo puedo obtener UserDetails en mi controlador?

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


Esa es otra solución (Spring Security 3):

public String getLoggedUser() throws Exception { String name = SecurityContextHolder.getContext().getAuthentication().getName(); return (!name.equals("anonymousUser")) ? name : null; }


Si solo desea imprimir el nombre de usuario en las páginas, tal vez le guste esta solución. Está libre de objetos fundidos y funciona sin Spring Security también:

@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; }

Tenga en cuenta el parámetro " solicitud HttpServletRequest " agregado.

Funciona bien porque Spring inyecta sus propios objetos (wrappers) para HttpServletRequest, Principal etc., por lo que puede usar métodos java estándar para recuperar información del usuario.


Si ya está seguro de que el usuario ha iniciado sesión (en su ejemplo, si /index.html está protegido):

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

Para verificar primero si el usuario está conectado, verifique que la Authentication actual no sea un AnonymousAuthenticationToken Authentication AnonymousAuthenticationToken .

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


si está utilizando seguridad de primavera, puede obtener el usuario conectado actualmente

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