Оставайтесь в системе, cookie не работает
Я пытаюсь сделать... Оставайтесь в системе
Это мой метод для добавления куки...
public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) {
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
Вызов этого метода здесь... (другой код опущен)
@Stateless
public class CuentaUsuarioEJB implements Serializable{
public boolean loginUsuario(CuentaUsuario cuentaUsuario, HttpSession httpSession, boolean remember, HttpServletResponse response) throws TraeloException{
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("email", cuentaUsuario.getEmail());
parametros.put("password", Encryption.encrypt(cuentaUsuario.getPassword()));
List<CuentaUsuario> cuentasUsuarios = crudeServiceBean.findWithNamedQuery(NamedQueries.CONSULTA_LOGIN_CUENTA, parametros, 1);
if(!Utils.isEmpty(cuentasUsuarios)){
httpSession.setAttribute(Constantes.USER, cuentasUsuarios.get(0));
if(remember){
String uuid = Encryption.encrypt(cuentasUsuarios.get(0).getEmail());
Utils.addCookie(response, Constantes.COOKIE_LOGIN, uuid, Constantes.COOKIE_AGE);
}else{
Utils.removeCookie(response, Constantes.COOKIE_LOGIN);
}
return true;
}
return false;
}
}
Фильтр...
@WebFilter(filterName="FiltroSeguridad")
public class FiltroSeguridad implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession session = httpRequest.getSession(true);
CuentaUsuario cuentaUsuario = (CuentaUsuario)session.getAttribute(Constantes.USER);
//Si el usuario no ha iniciado sesión
if(Utils.isEmpty(cuentaUsuario)){
//Se obtiene valor de la cookie
String uuid = Utils.getCookieValue(httpRequest, Constantes.COOKIE_LOGIN);
if(!Utils.isEmpty(uuid)){
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("email", Encryption.decrypt(uuid));
//Existe un usuario con el valor guardado en la cookie
List<CuentaUsuario> cuentasUsuarios = crudeServiceBean.findWithNamedQuery(NamedQueries.CONSULTA_LOGIN_CUENTA_COOKIE, parametros, 1);
if(!Utils.isEmpty(cuentasUsuarios)){
session.setAttribute(Constantes.USER, cuentasUsuarios.get(0));
Utils.addCookie(httpResponse, Constantes.COOKIE_LOGIN, uuid, Constantes.COOKIE_AGE);
cuentaUsuario = cuentasUsuarios.get(0);
}else{
Utils.removeCookie(httpResponse, Constantes.COOKIE_LOGIN);
}
}
}
//No existe cookie y el usuario no está logueado
if(Utils.isEmpty(cuentaUsuario)){
session.setAttribute(Constantes.RUTA,httpRequest.getRequestURI());
httpResponse.sendRedirect(httpRequest.getContextPath()+"/generales/login.xhtml");
}else{
chain.doFilter(request, response);
}
}
}
И это...
public static String getCookieValue(HttpServletRequest request, String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
Процесс входа в систему работает нормально. Но я закрываю браузер и открываю, в этом месте метод getCookieValue не возвращает мой cookie. Я понятия не имею, потому что это случилось.
Благодарю.
PS: простите за мой английский
1 ответ
Решение
Чтобы понять, что сказал @eis, попробуйте это:
public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) {
Cookie cookie = new Cookie(name, value);
cookie.setPath( "/" );
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}