2012-01-17 4 views
13

Voy a crear un servicio de autenticación personalizado en mi primavera aplicación MVC:cómo crear una cookie y agregar a la respuesta http desde dentro de mi capa de servicio?

@Service 
public class AuthenticationServiceImpl implements AuthenticationService { 

    @Autowired 
    UserService userService; 

    @Override 
    public void login(String email, String password) { 

     boolean isValid = userService.isValidLogin(email, password); 

     if(isValid) { 
      // ??? create a session cookie and add to http response 
     } 

    } 

} 

¿Cómo puedo crear y añadir la cookie a la respuesta?

Respuesta

16

En Spring MVC que presentamos lo mejor el objeto HtppServletResponce por defecto.

@RequestMapping("/myPath.htm") 
    public ModelAndView add(HttpServletRequest request, 
     HttpServletResponse response) throws Exception{ 
      //Do service call passing the response 
    return new ModelAndView("CustomerAddView"); 
    } 

//Service code 
Cookie myCookie = 
    new Cookie("name", "val"); 
    response.addCookie(myCookie); 
0

Para añadir una nueva cookie, utilice HttpServletResponse.addCookie(Cookie). El Cookie es prácticamente un par de valores clave que toma un nombre y valor como cadenas en la construcción.

+1

Por cierto, yo no recomiendo hacer esto para crear su propio esquema de autenticación. –

18

Siguiendo @ respuesta de Aravind con más detalles

@RequestMapping("/myPath.htm") 
public ModelAndView add(HttpServletRequest request, HttpServletResponse response) throws Exception{ 
    myServiceMethodSettingCookie(request, response);  //Do service call passing the response 
    return new ModelAndView("CustomerAddView"); 
} 

// service method 
void myServiceMethodSettingCookie(HttpServletRequest request, HttpServletResponse response){ 
    final String cookieName = "my_cool_cookie"; 
    final String cookieValue = "my cool value here !"; // you could assign it some encoded value 
    final Boolean useSecureCookie = false; 
    final int expiryTime = 60 * 60 * 24; // 24h in seconds 
    final String cookiePath = "/"; 

    Cookie cookie = new Cookie(cookieName, cookieValue); 

    cookie.setSecure(useSecureCookie); // determines whether the cookie should only be sent using a secure protocol, such as HTTPS or SSL 

    cookie.setMaxAge(expiryTime); // A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits. A zero value causes the cookie to be deleted. 

    cookie.setPath(cookiePath); // The cookie is visible to all the pages in the directory you specify, and all the pages in that directory's subdirectories 

    response.addCookie(cookie); 
} 

Documentos relacionados:

http://docs.oracle.com/javaee/7/api/javax/servlet/http/Cookie.html

http://docs.spring.io/spring-security/site/docs/3.0.x/reference/springsecurity.html

5

Una cookie es un objeto con par de valores clave para almacenar información relacionado a la cliente. El objetivo principal es personalizar la experiencia del cliente.

Un método de utilidad se pueden crear como

private Cookie createCookie(String cookieName, String cookieValue) { 
    Cookie cookie = new Cookie(cookieName, cookieValue); 
    cookie.setPath("/"); 
    cookie.setMaxAge(MAX_AGE_SECONDS); 
    cookie.setHttpOnly(true); 
    cookie.setSecure(true); 
    return cookie; 
} 

Si almacenar información importante, entonces debemos poner alsways setHttpOnly de manera que no se puede acceder a la cookie/modificada a través de JavaScript. setSecure es aplicable si desea que se acceda a las cookies solo a través del protocolo https.

usando anterior método de utilidad puede agregar cookies para la respuesta

Cookie cookie = createCookie("name","value"); 
response.addCookie(cookie); 
Cuestiones relacionadas