로그인하지 않은 - 로그인 후 세션을 삭제하고 새 세션을 :세션 고정은 - 나는 LoginController.java이처럼 보이는이 있지만 사용자는 내가 7</p> <p>으로 JBoss에서의 jsf2.0 및 자바 EE6을 사용하여 더 이상
내가이 시점에서 내 코드에서이 작업을 수행 :
:@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를 추가하는 방법은 있습니까?
또는 일반적인 방법은 무엇입니까?
다시 ... 당신에게 감사! 이 완벽하게 작동합니다 .... 다시 logout userProvider 필요한 경우 ...하지만 로그 아웃하려고하면, 뭔가를 만들 :'loggedIn = false; \t \t user.setLoggedIn (false); userProvider.saveChangedUser (user); ExternalContext externalContext = FacesContext.getCurrentInstance(). getExternalContext(); externalContext.invalidateSession();'하지만 userprovider는 비어 있습니다. 나는 또한 userProvider를 세션에 넣으려고 시도했지만 작동하지 않습니다. - 그리고 그 오류가 발생하면 userProvider가 null이기 때문에 다시 로그인 할 수 없습니다 ... – Joerg
... ok, userProvider가 비어 있지 않습니다. userProvider 안에있는 entityManager (그리고'@Injected' 또는'@Produces'는 비어 있습니다.) – Joerg
'@ Inject'는 CDI이고 JSF'@ ManagedBean'에서는 작동하지 않습니다. 단지'@ Named' . 'UserProvider'를 @Stateeless로 만들고 그것을 @ EJB'로 주입하십시오. – BalusC