2014-02-19 6 views
0

java restlet 서버를 다루는 내 탐구가 계속됩니다.Restlet - 새로운 사용자가 생성 된 후 Authenticator Verifier 맵을 업데이트하는 방법?

원하는대로 내 라우팅을 설정할 수있었습니다. 특히 URL에서 POST 호출로 생성 할 수있는 사용자 리소스가 있습니다. 이 경우 데이터베이스에 새 사용자가 생성됩니다.

이 시점부터 새로운 사용자가 인증을 받기를 바랍니다. 문제는 인바운드 루트의 인증 프로그램이 처음에 사용자 이름과 암호를 한 번로드한다는 것입니다. 따라서 새 사용자가 생성되면 서버를 다시 시작하지 않으면 인증 할 수 없습니다.

이 문제를 쉽게 해결할 수있는 방법이 있어야합니다.

public class UserResource extends ServerResource{ 

     @Post 
    public Representation acceptItem(Representation entity) { 
      //get the data from the form  
      //insert the new user in the db 


      /* TODO: I think i should add something here 
       to refresh the verifier map! 
       */ 
     } 
} 

은 어떻게 검증 맵을 새로 고칠 수 있습니다 :

public class APIServerApplication extends Application { 


    @Override 
    public Restlet createInboundRoot(){ 
      //some routers and filter.. 

      //here the verifier is initialized with the current users and passwords: 
      MapVerifier verifier = new MapVerifier(); 

      //get users and pwd from DB 
      HashMap<String,String> usrPwdMap = SomeDBClass.getVerifierMap(); 
      for(String uname : usrPwdMap.keySet()){ 
       verifier.getLocalSecrets().put(uname, (usrPwdMap.get(uname)).toCharArray()); 
      } 

      //..verifier is used to build the authenticator... etc 

    } 

사용자 자원과 같은 :

는 응용 프로그램입니까?

답변

0

프로덕션 응용 프로그램에서 일을 잘못 수행하는 방식입니다. 절대로 사용자 이름/암호 조합을 메모리에로드하지 마십시오. 너무 과잉이라고 할 수 있습니다.

실제로 모든 HTTP 요청에서 해당 사용자의 DB에 저장된 사용자 이름/암호와 사용자 이름/암호를 비교하도록 응용 프로그램을 수정하십시오. 그것은 일을하는 편안한 방법입니다. 이것이 좋은 방법이 아니라고 생각한다면이 질문에 대한 답변을 읽어 보시기 바랍니다 : RESTful authentication - resulting poor performance on high load?

+2

생산 목적으로 결과를 찾는 사용자 정의 Restlet Verifier (하위 클래스 참조)를 구축해야한다는 데 동의합니다. 사용자 디렉토리 (데이터베이스 또는 다른 것)의 각 호출마다. –

+0

감사합니다! 나는 이것을 조사하고있다. –