Есть JSF приложение, в котором по нажатию на кнопку логин:
<h:commandButton styleClass="btn btn-danger" action="${authBean.doLogin()}" value="Войти">
<f:ajax event="keyup" render="fail"/>
</h:commandButton>
В методе authBean doLogin() проверяется методом check() ести ли данный пользователь в бд вот он:
public String doLogin() {
if(check(this.login, this.password)){
if(createCookie) addCookieWithLP(this.login, this.password);
return "feed";
}else{
return "";
}
}
Далее если пользователь поставил галочку "Запомнить меня" создаются куки в следующем методе
public void addCookieWithLP(String log, String pass){
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
Cookie cookieLog = new Cookie("login", log);
cookieLog.setHttpOnly(true);
cookieLog.setMaxAge(60 * 60 * 24 * 365);
cookieLog.setPath("/");
response.addCookie(cookieLog);
Cookie cookiePass = new Cookie("password", pass);
cookiePass.setHttpOnly(true);
cookiePass.setMaxAge(60 * 60 * 24 * 365);
cookiePass.setPath("/");
response.addCookie(cookiePass);
}
Проблема состоит в том, что, когда пользователь успешно вошёл, и к нему добавились Cookie, то он попадает на страницу, где в меню есть следующая кнопка:
<h:outputLink value="/login" onclick="${authBean.removeCookies()}" styleClass="dropdown-item ">Выход</h:outputLink>
Которая ссылается на метод удаления куков:
public void removeCookies(){
FacesContext context = FacesContext.getCurrentInstance();
if(context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
HttpServletRequest request = (HttpServletRequest) context.getCurrentInstance().getExternalContext().getRequest();
response.setStatus(HttpServletResponse.SC_OK);
request.getSession().invalidate();
for (Cookie cookie : request.getCookies()) {
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
И вот, пользователь, получивший свои законные куки, попав на следующую страницу сразу теряет их)) Я смотрел в хранилище браузера, они появляются и сразу исчезают.
Можно ли как-то решить данную проблему, чтобы Cookie сохранялись, а при нажатии на кнопку уничтожались. Заранее спасибо за любую помощь.
EDIT.
p:commandButton от фреймфорка PrimeFaces работает прекрасно, но у нёё свой стиль и она сильно отделяется от других, притом стиль не меняется. Заработало, если вместо h:outputLink сделать h:commandButton и обернуть его в h:form:
<h:form>
<h:commandButton value="Выйти" action="${authBean.removeCookie()}" />
</h:form>
Виртуальный выделенный сервер (VDS) становится отличным выбором
Никак не получается изменить цвет NavBar'a в андроид приложенииПробовал прописывать в resources/style:
Нужно сделать EditText таким, чтобы он был многострочным, но при этом в длину был "бесконечным"
При использовании in и out в классе MainActivity приложение закрываетсяЕсли использовать их напрямую в методе OnCreate () всё работает, но когда используется...