code: @Override
      public Map<String, String> getChangedPropertiesMap(WebAppSecurityConfig original) {
          // Bail out if it is the same object, or if this isn't of the right type.
          if (this == original) {
              return null;
          }
          if (!(original instanceof WebAppSecurityConfigImpl)) {
              return null;
          }
  
          TreeMap<String, String> output = new TreeMap<String, String>();
          WebAppSecurityConfigImpl orig = (WebAppSecurityConfigImpl) original;
  
          for (Entry<String, String> entry : configAttributes.entrySet()) {
              try {
                  Field field = (WebAppSecurityConfigImpl.class).getDeclaredField(entry.getValue());
                  field.setAccessible(true);
                  appendToMapIfDifferent(output, entry.getKey(), field.get(this), field.get(orig));
              } catch (Exception e) {
                  // this won't happen. just ignore.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Exception is caught " + e);
                  }
              }
          }
          if (output.isEmpty()) {
              output = null;
          }
          return output;
      }
docs: {@inheritDoc}<p>
  This method needs to be maintained when new attributes are added.
  Order should be presented in alphabetical order.