1
2
3
4
5
6
7
8
9
10
11 package org.mule.module.management.support;
12
13 import org.mule.module.management.agent.JmxAgent;
14 import org.mule.util.ObjectUtils;
15 import org.mule.util.StringUtils;
16
17 import java.util.Collections;
18 import java.util.HashMap;
19 import java.util.HashSet;
20 import java.util.Map;
21 import java.util.Set;
22
23 import javax.management.remote.JMXAuthenticator;
24 import javax.management.remote.JMXPrincipal;
25 import javax.security.auth.Subject;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29
30
31
32
33
34 public class SimplePasswordJmxAuthenticator implements JMXAuthenticator
35 {
36
37
38
39 protected static final Log logger = LogFactory.getLog(JmxAgent.class);
40
41
42
43
44 private Map credentials = new HashMap();
45
46
47
48
49 public Subject authenticate (Object authToken)
50 {
51 if (authToken == null)
52 {
53 throw new SecurityException("No authentication token available");
54 }
55 if (!(authToken instanceof String[]) || ((String[]) authToken).length != 2)
56 {
57 throw new SecurityException("Unsupported credentials format");
58 }
59
60 String[] authentication = (String[]) authToken;
61
62 String username = StringUtils.defaultString(authentication[0]);
63 String password = StringUtils.defaultString(authentication[1]);
64
65 if (!credentials.containsKey(username))
66 {
67 throw new SecurityException("Unauthenticated user: " + username);
68 }
69
70 if (!password.equals(ObjectUtils.toString(credentials.get(username))))
71 {
72 throw new SecurityException("Invalid password");
73 }
74
75 Set principals = new HashSet();
76 principals.add(new JMXPrincipal(username));
77 return new Subject(true, principals, Collections.EMPTY_SET, Collections.EMPTY_SET);
78 }
79
80
81
82
83
84
85
86 public void setCredentials (final Map newCredentials)
87 {
88 this.credentials.clear();
89 if (newCredentials == null || newCredentials.isEmpty())
90 {
91 logger.warn("Credentials cache has been purged, remote access will no longer be available");
92 }
93 else
94 {
95 this.credentials.putAll(newCredentials);
96 }
97 }
98 }