1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.util;
18
19 import java.net.URLConnection;
20 import java.util.function.Supplier;
21
22 import org.apache.logging.log4j.Logger;
23 import org.apache.logging.log4j.status.StatusLogger;
24 import org.apache.logging.log4j.util.Base64Util;
25 import org.apache.logging.log4j.util.LoaderUtil;
26 import org.apache.logging.log4j.util.PropertiesUtil;
27
28
29
30
31 public class BasicAuthorizationProvider implements AuthorizationProvider {
32 private static final String[] PREFIXES = {"log4j2.config.", "logging.auth."};
33 private static final String AUTH_USER_NAME = "username";
34 private static final String AUTH_PASSWORD = "password";
35 private static final String AUTH_PASSWORD_DECRYPTOR = "passwordDecryptor";
36 public static final String CONFIG_USER_NAME = "log4j2.configurationUserName";
37 public static final String CONFIG_PASSWORD = "log4j2.configurationPassword";
38 public static final String PASSWORD_DECRYPTOR = "log4j2.passwordDecryptor";
39
40 private static Logger LOGGER = StatusLogger.getLogger();
41
42 private String authString = null;
43
44 public BasicAuthorizationProvider(PropertiesUtil props) {
45 String userName = props.getStringProperty(PREFIXES,AUTH_USER_NAME,
46 () -> props.getStringProperty(CONFIG_USER_NAME));
47 String password = props.getStringProperty(PREFIXES, AUTH_PASSWORD,
48 () -> props.getStringProperty(CONFIG_PASSWORD));
49 String decryptor = props.getStringProperty(PREFIXES, AUTH_PASSWORD_DECRYPTOR,
50 () -> props.getStringProperty(PASSWORD_DECRYPTOR));
51 if (decryptor != null) {
52 try {
53 Object obj = LoaderUtil.newInstanceOf(decryptor);
54 if (obj instanceof PasswordDecryptor) {
55 password = ((PasswordDecryptor) obj).decryptPassword(password);
56 }
57 } catch (Exception ex) {
58 LOGGER.warn("Unable to decrypt password.", ex);
59 }
60 }
61 if (userName != null && password != null) {
62 authString = "Basic " + Base64Util.encode(userName + ":" + password);
63 }
64 }
65
66 @Override
67 public void addAuthorization(URLConnection urlConnection) {
68 if (authString != null) {
69 urlConnection.setRequestProperty("Authorization", authString);
70 }
71 }
72 }