Я использую 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 в новый сеанс после создания?
Или как обычно это сделать?