나는 세션 확장을 최소화하기 위해 주로 ViewScoped 빈을 사용하는 webprojekt에서 일하고있다. 그러나 나는 (데이터베이스에 접근하기 위해) 빈 사이에 클라이언트 사용자 이름과 패스워드를 전송해야하는 문제에 직면한다.ViewScoped Bean간에 비밀 사용자 이름과 암호를 전송하는 방법은 무엇입니까?
나는 이와 같은 콩과 사용자 이름과 암호를 전송하는 플래시 객체를 사용하고있는 시스템을 만들었습니다 :
public String gotoNextView() {
ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
external.getFlash().put("user_name", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("user_name"));
external.getFlash().put("password", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("password"));
return "/../../next_view.xhtml";
}
하지만 해커가 클라이언트를 조작하는 것이 든 가능 여부에 대한 걱정 따라서 플래시 객체를 노출하기 위해 서버를 트릭합니다!
내가 생각하고있는 또 다른 해결책은 사용자 이름과 비밀번호를 값으로 사용하여 웹 애플리케이션 용 JSESSIONID를 맵의 키로 저장하는 것입니다. 이 작업을 수행하기 위해 사용자 세션이 끝나거나 만료 될 때 콜백 메소드를 호출하여 맵에서 관련 JSESSIONID를 제거 할 수 있어야한다고 생각합니다. 하지만 그 솔루션의 문제점은 콜백을 구현하는 가장 좋은 방법이 무엇인지에 대한 의문이 생겨서 새로운 유사한 JSESSIONID가 서버에서 생성되기 전에 Map 항목이 제거된다는 것을 100 % 확신 할 수 있다는 것입니다. 기회가 극도로 적어서 짧은 시간 내에 일어날 가능성이 있음을 알고 있음). 또한 내가 어떤 이유로 JSESSIONID (사용자)가 JSESSIONID를 삭제 (예 : 데이터베이스 작업)하기 전에 JSESSIONID (사용자)와 함께 작업하는 빈을 가지고 무엇을 할 지 의심 스럽다. 유사한 JSESSIONID는 JSESSIONID와 다른 사용자가 섞여있는 다른 사용자를 위해 서버에 의해 생성됩니다.
나는이 문제에 대한 깊은 통찰력을 가진 사람이 모범 사례와 100 % 안전한 방법에 대해 쓴다. (JSF 웹 응용 프로그램 서버로 작업하는 대부분의 사람들이이 문제를 겪고 따라서 다른 사람들이 문제에 대한 최선의 해결책을 아는 데 도움이 됨). 감사.
에 변수를 전달하기 전에 물건을 (오버 헤드를 고려) 암호화하지도 세션 또는 요청 범위에서. 응용 프로그램은 사용자가 아닌 데이터베이스 자체에 액세스해야합니다. – EJP
사용자 이름에 세션 속성을 사용하고 싶지 않은 이유가 있습니까? 세션의 해당 정보 만 보유하면 세션이 소규모로 유지되고 모든 문제를 방지 할 수 있습니다. –
@Martin Frey : HttpServletRequest 및 HttpServletResposne 객체 사용에 대해 이야기하고 있습니까? 나는 그걸하는 법을 모른다. –