2016-11-25 8 views
0

Я посылаю запрос с помощью следующего кода:Как предотвратить регистрацию конфиденциальных данных с помощью SyncInvoker.post?

final WebTarget target = client.target(url); 
CustomResponse response = target.request(MediaType.APPLICATION_XML_TYPE) 
          .post(Entity.xml(password), CustomResponse.class); 

Authentication предназначен принять имя пользователя как часть url в то время как пароль передается в теле запроса.

Проблема заключается в том, что пароль отображается в журналах, которые генерируются классом ClientRequest#writeEntity() внутри библиотеки javax.ws.rs.

Итак, мой вопрос заключается в том, как заставить библиотеку не хранить пароль в журналах, не отключаясь?

спасибо.

+0

Не можете ли вы хотя бы зашифровать паспорт? – AxelH

ответ

1

Создайте заказ java.util.logging.Filter и установите его на java.util.logging.Logger, который генерирует log record. Вы можете просто опустить эту запись в журнале, возвращая false или просто перезаписать параметр или сообщение записи журнала, чтобы он не содержал пароль.

import java.util.logging.Filter; 
import java.util.logging.LogRecord; 


public class PasswordFilter implements Filter { 

    @Override 
    public boolean isLoggable(LogRecord record) { 
     if (isPasswordCallSite(record)) { 
      //return false; // omit log entry. 
      //Or hide password. 
      Object[] params = record.getParameters(); 
      if (params != null && params.length != 0) { 
       params = params.clone(); 
       String data = String.valueOf(params[0]); 

       //Write code to find and replace password. 
       params[0] = data; 
       record.setParameters(params); 
      } 
     } 
     return true; 
    } 

    private boolean isPasswordCallSite(LogRecord r) { 
     return "foo.bar.ClientRequest".equals(r.getSourceClassName()) 
       && "writeEntity".equals(r.getSourceMethodName()); 
    } 
} 
Смежные вопросы