2010-03-31 6 views
2

양식 기반 인증을 성공적으로 구현했으며 이제는 서블릿에서 javamail의 세션 객체를 초기화하기 위해 사용자 이름과 암호를 얻고 싶습니다. 어떻게해야합니까? request.getRemoteUser() 메서드를 사용하여 사용자 이름을 getlogin 할 수 있지만 암호를 얻는 방법을 모르겠습니다.서블릿에서 로그인 암호를 얻는 방법

내가 만드는 경우처럼 어떤 세션 객체 :

authentication = new PasswordAuthentication(user,password); 
Properties props = new Properties(); 
props.put("mail.host", "localhost"); 
props.put("mail.debug",true); 
props.put("mail.store.protocol", "pop3"); 
props.put("mail.transport.protocol", "smtp"); 
Session session = Session.getInstance(props, this); 

후 어떻게 얻을 수있는 특정 사용자 이름과 암호를 기반으로 메일 서버에서받은 편지함 메시지, 내가 한 PasswordAuthentication 객체에 대한 서블릿에서 모든 암호를 전달하지 않는 경우?

답변

3

Java EE/Servlet API는 허용하지 않습니다. 컨테이너와 동일한 사용자 - 암호 소스에서 사용자 이름으로 암호를 가져 오거나 컨테이너와 코드가 모두 데이터베이스와 같이 사용할 수 있도록 사용자 암호 소스를 외부화해야합니다. "Realm"키워드를 사용하여 해당 컨테이너의 문서를 확인하십시오. Tomcat을 (질문 기록을 기반으로) 사용하는 것으로 보이기 때문에 here은 톰캣 대상 예이며 체크 아웃은 JDBCRealm입니다.

0

로그인 폼의 제출 버튼에 "onClick"자바 스크립트 핸들러를 놓고 비밀번호를 저장하는 서블릿에 대한 AJAX 호출을 실행할 수 있습니다. 그러나 보안 프레임 워크를 위반하고 있습니다.
더 나은 아이디어는 J2EE 인증에 의해 보호되는 "안전한"암호 지갑 기능을 갖는 것입니다. 이 함수는 데이터베이스 또는 LDAP에서 전자 메일 암호를 검색합니다. 물론이 경우 데이터베이스는 암호를 일반 텍스트 또는 난독 화 형식으로 저장해야합니다.
서블릿과 전자 메일 서버 모두에 외부 인증 자 (단일 사인온)를 사용하는 것이 더 좋겠지 만 둘 다 지원하는 인증 공급자가있는 경우에만 가능합니다.

관련 문제