Я использую jsf2.0 и java ee6 на JBoss AS 7
У меня есть LoginController.java, выглядящий так:
@ManagedBean(name = "loginController")
@SessionScoped
public class LoginController implements Serializable{
private static final long serialVersionUID = 1119172305268193508L;
@Inject
private UserProvider userProvider;
@PostConstruct
public void initNewUser() {
user = new User();
}
private User user;
private String accountName;
private String password;
public String ownLogin() throws Exception {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest();
if (accountName != null) {
try {
if (exists(accountName)) {
user = userProvider.findUserByAccountName(accountName);
if (verifyPassword(user, password)) {
userProvider.saveChangedUser(user);
// OWASP SAYS: after login, destroy the session make a new one
// a so called handover
// Destroy the session
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
if(session != null){
session.invalidate();
}
// create new session after logout
session = (HttpSession) facesContext.getExternalContext().getSession(true);
setLogin(true);
}
}
/* some getters and setters */
}
OWASP говорит, что из соображений безопасности после входа сеансы должны быть удалены (см.:V3.7)
я делаю это в своем коде на данный момент:
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
if(session != null){
session.invalidate();
}
// create new session after logout
session = (HttpSession) facesContext.getExternalContext().getSession(true);
Сначала я удаляю старый сеанс, затем создаю новый сеанс.
После этого я установил логин true...
Конечно, после выполнения всего кода пользователь не вошел в систему, потому что LoginController управлялся в старой области сеанса -и в новой области сеанса. в области есть новый LoginController без вошедшего в систему пользователя...
Есть ли способ добавить новый LoginController в новую сессию после создания?
Или как это обычно делается?