gpt4 book ai didi

java - 保持登录状态 cookie 不起作用

转载 作者:行者123 更新时间:2023-12-02 07:18:47 26 4
gpt4 key购买 nike

我尝试... Stay Logged in

这是我添加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:抱歉我的英语

最佳答案

要详细说明@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);
}

关于java - 保持登录状态 cookie 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com