@Override
	public UserDetails loadUserByUsername(String userId) {
		for (OnLoginRunnable each : getPluginManager().getEnabledModulesByClass(OnLoginRunnable.class, asList(defaultLdapLoginPlugin, defaultLoginPlugin))) {
			User user = each.loadUser(userId);
			if (user != null) {
				checkNotEmpty(user.getUserId(), "User info's userId provided by " + each.getClass().getName()
						+ " should not be empty");
				checkNotEmpty(user.getUserName(), "User info's userName provided by " + each.getClass().getName()
						+ " should not be empty");
				return new SecuredUser(user, user.getAuthProviderClass());
			}
		}
		throw new UsernameNotFoundException(userId + " is not found.");
	}
NGrinder {@link UserDetailsService}.

This resolves user info using plugins implementing {@link OnLoginRunnable}.
ngrinder-controller/src/main/java/org/ngrinder/security/NGrinderUserDetailsService.java