Project

General

Profile

Download (23.3 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2014 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9
package eu.etaxonomy.cdm.api.application;
10

    
11
import java.util.ArrayList;
12
import java.util.Arrays;
13
import java.util.HashMap;
14
import java.util.List;
15
import java.util.Map;
16

    
17
import org.apache.commons.lang3.StringUtils;
18
import org.apache.logging.log4j.LogManager;
19
import org.apache.logging.log4j.Logger;
20
import org.springframework.remoting.httpinvoker.CachingHttpInvokerProxyFactoryBean;
21
import org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor;
22
import org.springframework.security.access.AccessDecisionVoter;
23
import org.springframework.security.authentication.AuthenticationProvider;
24
import org.springframework.security.authentication.ProviderManager;
25
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
26
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
27
import org.springframework.security.authentication.dao.ReflectionSaltSource;
28
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
29
import org.springframework.security.core.Authentication;
30
import org.springframework.security.core.context.SecurityContext;
31
import org.springframework.security.core.context.SecurityContextHolder;
32
import org.springframework.stereotype.Component;
33

    
34
import eu.etaxonomy.cdm.api.service.IAgentService;
35
import eu.etaxonomy.cdm.api.service.IAnnotationService;
36
import eu.etaxonomy.cdm.api.service.IClassificationService;
37
import eu.etaxonomy.cdm.api.service.ICollectionService;
38
import eu.etaxonomy.cdm.api.service.ICommonService;
39
import eu.etaxonomy.cdm.api.service.IDatabaseService;
40
import eu.etaxonomy.cdm.api.service.IDescriptionElementService;
41
import eu.etaxonomy.cdm.api.service.IDescriptionService;
42
import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
43
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
44
import eu.etaxonomy.cdm.api.service.IEntityValidationService;
45
import eu.etaxonomy.cdm.api.service.IEventBaseService;
46
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
47
import eu.etaxonomy.cdm.api.service.IGroupService;
48
import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;
49
import eu.etaxonomy.cdm.api.service.ILocationService;
50
import eu.etaxonomy.cdm.api.service.IMediaService;
51
import eu.etaxonomy.cdm.api.service.IMetadataService;
52
import eu.etaxonomy.cdm.api.service.INameService;
53
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
54
import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
55
import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
56
import eu.etaxonomy.cdm.api.service.IPreferenceService;
57
import eu.etaxonomy.cdm.api.service.IProgressMonitorService;
58
import eu.etaxonomy.cdm.api.service.IReferenceService;
59
import eu.etaxonomy.cdm.api.service.IRegistrationService;
60
import eu.etaxonomy.cdm.api.service.IRightsService;
61
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
62
import eu.etaxonomy.cdm.api.service.ITaxonService;
63
import eu.etaxonomy.cdm.api.service.ITermNodeService;
64
import eu.etaxonomy.cdm.api.service.ITermService;
65
import eu.etaxonomy.cdm.api.service.ITermTreeService;
66
import eu.etaxonomy.cdm.api.service.ITestService;
67
import eu.etaxonomy.cdm.api.service.IUserService;
68
import eu.etaxonomy.cdm.api.service.IVocabularyService;
69
import eu.etaxonomy.cdm.api.service.longrunningService.ILongRunningTasksService;
70
import eu.etaxonomy.cdm.api.service.media.MediaInfoFactory;
71
import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
72
import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
73
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
74
import eu.etaxonomy.cdm.api.service.registration.IRegistrationWorkingSetService;
75
import eu.etaxonomy.cdm.api.service.security.IAccountRegistrationService;
76
import eu.etaxonomy.cdm.api.service.security.IPasswordResetService;
77
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
78
import eu.etaxonomy.cdm.io.service.IIOService;
79
import eu.etaxonomy.cdm.persistence.permission.CdmPermissionEvaluator;
80
import eu.etaxonomy.cdm.persistence.permission.ICdmPermissionEvaluator;
81
import eu.etaxonomy.cdm.persistence.permission.UnanimousBasedUnrevokable;
82
import eu.etaxonomy.cdm.persistence.permission.voter.DescriptionBaseVoter;
83
import eu.etaxonomy.cdm.persistence.permission.voter.DescriptionElementVoter;
84
import eu.etaxonomy.cdm.persistence.permission.voter.GrantAlwaysVoter;
85
import eu.etaxonomy.cdm.persistence.permission.voter.TaxonBaseVoter;
86
import eu.etaxonomy.cdm.persistence.permission.voter.TaxonNodeVoter;
87
import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource;
88
import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
89
import eu.etaxonomy.taxeditor.service.AuthenticatingHttpInvokerRequestExecutor;
90
import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl;
91
import eu.etaxonomy.taxeditor.service.ICachedCommonService;
92
import eu.etaxonomy.taxeditor.service.RemoteInvocationTermCacher;
93
import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager;
94
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
95

    
96
/**
97
 * CDM Application Configuration class which manages the configuration for remoting
98
 * clients
99
 */
100
@Component
101
// TODO split into CdmRepository and proper @Configuration class
102
public class CdmApplicationRemoteConfiguration implements ICdmRepository {
103

    
104
    @SuppressWarnings("unused")
105
    private static final Logger logger = LogManager.getLogger();
106

    
107
    /**
108
     * Timeout for service lookup etc. This timeout (milliseconds) should be more
109
     * strict than {@link #HTTP_READ_TIMEOUT} to avoid connecting to
110
     * cdm servers when the network quality is too bad.
111
     * Note AM: IMO we should not be to strict, sometimes services do not respond too fast
112
     *     during the first call (e.g. test server), therefore I put this up from 1 to 3 sec.
113
     *     Better we should inform the user that the connection might be of low quality
114
     *     instead of making the connection completely unavailable.
115
     */
116
    public static final int HTTP_READ_TIMEOUT_MIN = 3000; // 3 seconds
117

    
118
    /**
119
     * Timeout for normal operation (milliseconds)
120
     *
121
     * Infinite time out (value = 0) can cause the application to be stuck in
122
     * SocketInputStream.read(), Therefore it makes sense to specify a definite
123
     * timeout which is high enough to allow for longer operations
124
     * <p>
125
     * The application should be usable in networks with low connection quality,
126
     * e.g.: from cuba where the throughput rate is low (<= ISDN speed, 64 kbit)
127
     * and a packet delay of <200 ms.
128
     *
129
     */
130
    public static final int HTTP_READ_TIMEOUT = 10 * 60 * 1000;
131

    
132
    private ICdmRemoteSource remoteSource;
133

    
134
    //TODO should be something like Map<Class<IService>, IService>, but we have no common service base interface yet
135
    private Map<Class<?>, Object> serviceMap = new HashMap<>();
136

    
137
    private ICdmEntitySessionManager cdmEntitySessionManager;
138

    
139
    private CdmPermissionEvaluator cdmPermissionEvaluator;
140

    
141
    private ProviderManager authenticationManager;
142

    
143
    private ICachedCommonService cachedCommonService;
144

    
145
    static {
146
        // The Taxeditor is multithreaded, the same authentication should be used
147
        // in all threads
148
        SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
149
    }
150

    
151
    public CdmApplicationRemoteConfiguration() {}
152

    
153
    public CdmApplicationRemoteConfiguration(ICdmRemoteSource remoteSource) {
154
        this.remoteSource = remoteSource;
155
    }
156

    
157
    public void setRemoteSource(ICdmRemoteSource remoteSource) {
158
        this.remoteSource = remoteSource;
159
    }
160

    
161
    private Object getService(Class<?/* extends IService*/> clazz, String serviceSuffix, HttpComponentsHttpInvokerRequestExecutor executor) {
162
        if(serviceMap.containsKey(clazz)) {
163
            return serviceMap.get(clazz);
164
        }
165
        Object service = getService(clazz, serviceSuffix, remoteSource, executor);
166
        serviceMap.put(clazz,  service);
167
        return service;
168
    }
169

    
170
    public static Object getService(Class<?> clazz,
171
            String serviceSuffix,
172
            ICdmRemoteSource remoteSource,
173
            HttpComponentsHttpInvokerRequestExecutor executor) {
174

    
175
        String baseUrl;
176
        String protocol = remoteSource.getPort() == 443 ? "https" : "http";
177

    
178
        String contextPath = (remoteSource instanceof CdmRemoteSource)? ((CdmRemoteSource)remoteSource).getContextPath() : "";
179
        if(StringUtils.isBlank(contextPath)) {
180
            baseUrl = protocol + "://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort());
181
        } else {
182
            baseUrl = protocol + "://" + remoteSource.getServer()  + ":" + String.valueOf(remoteSource.getPort()) + "/" + contextPath;
183
        }
184
        CachingHttpInvokerProxyFactoryBean proxyFactory = new CachingHttpInvokerProxyFactoryBean();
185
        proxyFactory.setServiceInterface(clazz);
186
        proxyFactory.setServiceUrl(baseUrl + serviceSuffix);
187
        if(executor != null) {
188
            executor.setReadTimeout(HTTP_READ_TIMEOUT);
189
            executor.setConnectionRequestTimeout(HTTP_READ_TIMEOUT);
190
            proxyFactory.setHttpInvokerRequestExecutor(executor);
191
        }
192
        if(ITermService.class.isAssignableFrom(clazz)){
193
            proxyFactory.setRemoteInvocationTermCacher(new RemoteInvocationTermCacher());
194
        }
195
        proxyFactory.afterPropertiesSet();
196
        return proxyFactory.getObject();
197
    }
198

    
199
    // ****************************** APPLICATION CONTEXT *************************************************/
200

    
201
    public IEditGeoService getEditGeoService() {
202
        return (IEditGeoService) getService(IEditGeoService.class, "/remoting/editgeo.service", new AuthenticatingHttpInvokerRequestExecutor());
203
    }
204

    
205
    public ICachedCommonService getCachedCommonService(){
206
        if(cachedCommonService == null) {
207
            cachedCommonService = new CachedCommonServiceImpl();
208
        }
209
        return cachedCommonService;
210
    }
211

    
212
    public ICdmEntitySessionManager getCdmEntitySessionManager() {
213
        if(cdmEntitySessionManager == null) {
214
            cdmEntitySessionManager = new CdmEntitySessionManager();
215
        }
216
        return cdmEntitySessionManager;
217
    }
218

    
219
 // ****************************** GETTER *************************************************/
220

    
221
    @Override
222
    public IAccountRegistrationService getAccountRegistrationService() {
223
        return (IAccountRegistrationService) getService(IAccountRegistrationService.class, "/remoting/accountregistrationservice.service", new AuthenticatingHttpInvokerRequestExecutor());
224
    }
225

    
226
    @Override
227
    public IAgentService getAgentService(){
228
        return (IAgentService) getService(IAgentService.class, "/remoting/agent.service", new AuthenticatingHttpInvokerRequestExecutor());
229
    }
230

    
231
    @Override
232
    public IAnnotationService getAnnotationService(){
233
        return (IAnnotationService) getService(IAnnotationService.class, "/remoting/annotation.service", new AuthenticatingHttpInvokerRequestExecutor());
234
    }
235

    
236
    @Override
237
    public IDatabaseService getDatabaseService(){
238
        return (IDatabaseService) getService(IDatabaseService.class, "/remoting/database.service", new AuthenticatingHttpInvokerRequestExecutor());
239
    }
240

    
241
    @Override
242
    public INameService getNameService(){
243
        return (INameService) getService(INameService.class, "/remoting/name.service", new AuthenticatingHttpInvokerRequestExecutor());
244
    }
245

    
246
    @Override
247
    public IReferenceService getReferenceService(){
248
        return (IReferenceService) getService(IReferenceService.class, "/remoting/reference.service", new AuthenticatingHttpInvokerRequestExecutor());
249
    }
250

    
251
    @Override
252
    public ITaxonService getTaxonService(){
253
        return (ITaxonService) getService(ITaxonService.class, "/remoting/taxon.service", new AuthenticatingHttpInvokerRequestExecutor());
254
    }
255

    
256
    @Override
257
    public IClassificationService getClassificationService(){
258
        return (IClassificationService) getService(IClassificationService.class, "/remoting/classification.service", new AuthenticatingHttpInvokerRequestExecutor());
259
    }
260

    
261
    @Override
262
    public ITaxonNodeService getTaxonNodeService(){
263
        return (ITaxonNodeService) getService(ITaxonNodeService.class, "/remoting/taxonnode.service", new AuthenticatingHttpInvokerRequestExecutor());
264
    }
265

    
266
    @Override
267
    public IDescriptionService getDescriptionService(){
268
        return (IDescriptionService) getService(IDescriptionService.class, "/remoting/description.service", new AuthenticatingHttpInvokerRequestExecutor());
269
    }
270

    
271
    @Override
272
    public IDescriptionElementService getDescriptionElementService(){
273
        return (IDescriptionElementService) getService(IDescriptionElementService.class, "/remoting/descriptionelement.service", new AuthenticatingHttpInvokerRequestExecutor());
274
    }
275

    
276
    @Override
277
    public IOccurrenceService getOccurrenceService(){
278
        return (IOccurrenceService) getService(IOccurrenceService.class, "/remoting/occurrence.service", new AuthenticatingHttpInvokerRequestExecutor());
279
    }
280

    
281
    @Override
282
    public IPrimerService getPrimerService(){
283
        return (IPrimerService) getService(IPrimerService.class, "/remoting/primer.service", new AuthenticatingHttpInvokerRequestExecutor());
284
    }
285

    
286
    @Override
287
    public IAmplificationService getAmplificationService(){
288
        return (IAmplificationService) getService(IAmplificationService.class, "/remoting/amplification.service", new AuthenticatingHttpInvokerRequestExecutor());
289
    }
290

    
291
    @Override
292
    public ISequenceService getSequenceService(){
293
        return (ISequenceService) getService(ISequenceService.class, "/remoting/sequence.service", new AuthenticatingHttpInvokerRequestExecutor());
294
    }
295

    
296
    @Override
297
    public IEventBaseService getEventBaseService() {
298
        return (IEventBaseService) getService(IEventBaseService.class, "/remoting/eventbase.service", new AuthenticatingHttpInvokerRequestExecutor());
299
    }
300

    
301
    @Override
302
    public IMediaService getMediaService(){
303
        return (IMediaService) getService(IMediaService.class, "/remoting/media.service", new AuthenticatingHttpInvokerRequestExecutor());
304
    }
305

    
306
    @Override
307
    public ITermService getTermService(){
308
        return (ITermService) getService(ITermService.class, "/remoting/term.service", new AuthenticatingHttpInvokerRequestExecutor());
309
    }
310

    
311
    @Override
312
    public IRightsService getRightsService(){
313
        return (IRightsService) getService(IRightsService.class, "/remoting/rights.service", new AuthenticatingHttpInvokerRequestExecutor());
314
    }
315

    
316
    @Override
317
    public ICommonService getCommonService(){
318
        return (ICommonService) getService(ICommonService.class, "/remoting/common.service", new AuthenticatingHttpInvokerRequestExecutor());
319
    }
320

    
321
    @Override
322
    public ILocationService getLocationService(){
323
        return (ILocationService) getService(ILocationService.class, "/remoting/location.service", new AuthenticatingHttpInvokerRequestExecutor());
324
    }
325

    
326
    @Override
327
    public IUserService getUserService(){
328
        return (IUserService) getService(IUserService.class, "/remoting-public/user.service", new AuthenticatingHttpInvokerRequestExecutor());
329
    }
330

    
331
    public static IUserService getUserService(ICdmRemoteSource remoteSource) {
332
        return (IUserService) getService(IUserService.class, "/remoting-public/user.service", remoteSource, new HttpComponentsHttpInvokerRequestExecutor());
333
    }
334

    
335
    @Override
336
    public IMetadataService getMetadataService() {
337
        return (IMetadataService) getService(IMetadataService.class, "/remoting-public/metadata.service", new HttpComponentsHttpInvokerRequestExecutor());
338
    }
339

    
340
    public static IMetadataService getMetadataService(ICdmRemoteSource remoteSource) {
341
        return (IMetadataService) getService(IMetadataService.class, "/remoting-public/metadata.service", remoteSource, new HttpComponentsHttpInvokerRequestExecutor());
342
    }
343

    
344
    @Override
345
    public IGrantedAuthorityService getGrantedAuthorityService(){
346
        return (IGrantedAuthorityService) getService(IGrantedAuthorityService.class, "/remoting/grantedauthority.service", new AuthenticatingHttpInvokerRequestExecutor());
347
    }
348

    
349
    @Override
350
    public ProviderManager getAuthenticationManager(){
351
        if(authenticationManager == null) {
352
        	authenticationManager = getAuthenticationManager(getUserService());
353
        }
354
        return authenticationManager;
355
    }
356

    
357
    public static ProviderManager getAuthenticationManager(IUserService userService) {
358
        Md5PasswordEncoder passwordEncoder = new Md5PasswordEncoder();
359
        ReflectionSaltSource saltSource = new ReflectionSaltSource();
360
        saltSource.setUserPropertyToUse("getUsername");
361

    
362
        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
363
        daoAuthenticationProvider.setUserDetailsService(userService);
364
        daoAuthenticationProvider.setSaltSource(saltSource);
365
        daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
366

    
367
        return new ProviderManager(Arrays.asList((AuthenticationProvider)daoAuthenticationProvider));
368
    }
369

    
370
    @Override
371
    public ICollectionService getCollectionService(){
372
        return (ICollectionService) getService(ICollectionService.class, "/remoting/collection.service", new AuthenticatingHttpInvokerRequestExecutor());
373
    }
374

    
375
    @Override
376
    public ITermTreeService getTermTreeService() {
377
    	return (ITermTreeService) getService(ITermTreeService.class, "/remoting/termtree.service", new AuthenticatingHttpInvokerRequestExecutor());
378
    }
379

    
380
	@Override
381
	public ITermNodeService getTermNodeService() {
382
        return (ITermNodeService) getService(ITermNodeService.class, "/remoting/termnode.service", new AuthenticatingHttpInvokerRequestExecutor());
383
	}
384

    
385
    @Override
386
    public IVocabularyService getVocabularyService(){
387
        return (IVocabularyService) getService(IVocabularyService.class, "/remoting/vocabulary.service", new AuthenticatingHttpInvokerRequestExecutor());
388
    }
389

    
390
    @Override
391
    public IIdentificationKeyService getIdentificationKeyService(){
392
        return (IIdentificationKeyService) getService(IIdentificationKeyService.class, "/remoting/identificationkey.service", new AuthenticatingHttpInvokerRequestExecutor());
393
    }
394

    
395
    @Override
396
    public IPolytomousKeyService getPolytomousKeyService(){
397
        return (IPolytomousKeyService) getService(IPolytomousKeyService.class, "/remoting/polytomouskey.service", new AuthenticatingHttpInvokerRequestExecutor());
398
    }
399

    
400
    @Override
401
    public IPolytomousKeyNodeService getPolytomousKeyNodeService(){
402
        return (IPolytomousKeyNodeService) getService(IPolytomousKeyNodeService.class, "/remoting/polytomouskeynode.service", new AuthenticatingHttpInvokerRequestExecutor());
403
    }
404

    
405
    @Override
406
    public IProgressMonitorService getProgressMonitorService() {
407
        return (IProgressMonitorService) getService(IProgressMonitorService.class, "/remoting/progressmonitor.service", new AuthenticatingHttpInvokerRequestExecutor());
408
    }
409

    
410
    @Override
411
    public IDescriptiveDataSetService getDescriptiveDataSetService(){
412
        return (IDescriptiveDataSetService) getService(IDescriptiveDataSetService.class, "/remoting/descriptivedataset.service", new AuthenticatingHttpInvokerRequestExecutor());
413
    }
414

    
415
    @Override
416
    public IRegistrationService getRegistrationService() {
417
        return (IRegistrationService) getService(IRegistrationService.class, "/remoting/registration.service", new AuthenticatingHttpInvokerRequestExecutor());
418
    }
419

    
420
    @Override
421
    public IRegistrationWorkingSetService getRegistrationWorkingSetService() {
422
        return (IRegistrationWorkingSetService) getService(IRegistrationWorkingSetService.class, "/remoting/registrationworkingset.service", new AuthenticatingHttpInvokerRequestExecutor());
423
    }
424

    
425
    @Override
426
    public IGroupService getGroupService(){
427
        return (IGroupService) getService(IGroupService.class, "/remoting/group.service", new AuthenticatingHttpInvokerRequestExecutor());
428
    }
429

    
430
    @Override
431
    public IPreferenceService getPreferenceService(){
432
        return (IPreferenceService) getService(IPreferenceService.class, "/remoting/preference.service", new AuthenticatingHttpInvokerRequestExecutor());
433
    }
434

    
435
    @Override
436
    public IPasswordResetService getPasswordResetService(){
437
        return (IPasswordResetService) getService(IPasswordResetService.class, "/remoting/passwordreset.service", new AuthenticatingHttpInvokerRequestExecutor());
438
    }
439

    
440
    @Override
441
    public IEntityValidationService getEntityValidationService(){
442
        return (IEntityValidationService) getService(IEntityValidationService.class, "/remoting/entityvalidation.service", new AuthenticatingHttpInvokerRequestExecutor());
443
    }
444

    
445
    @Override
446
    public IEntityConstraintViolationService getEntityConstraintViolationService(){
447
        return (IEntityConstraintViolationService) getService(IEntityConstraintViolationService.class, "/remoting/entityconstraintviolation.service", new AuthenticatingHttpInvokerRequestExecutor());
448
    }
449

    
450
    @Override
451
    public MediaInfoFactory getMediaInfoFactory(){ // TODO use interface
452
        return (MediaInfoFactory) getService(MediaInfoFactory.class, "/remoting/mediainfofactory.service", new AuthenticatingHttpInvokerRequestExecutor());
453
    }
454

    
455
    @Override
456
    public ICdmPermissionEvaluator getPermissionEvaluator(){
457

    
458
        if(cdmPermissionEvaluator != null) {
459
            return cdmPermissionEvaluator;
460
        }
461
        List<AccessDecisionVoter<? extends Object>> decisionVoters = new ArrayList<>();
462
        decisionVoters.add(new GrantAlwaysVoter());
463
        decisionVoters.add(new TaxonNodeVoter());
464
        decisionVoters.add(new TaxonBaseVoter());
465
        decisionVoters.add(new DescriptionBaseVoter());
466
        decisionVoters.add(new DescriptionElementVoter());
467
        UnanimousBasedUnrevokable accessDecisionManager = new UnanimousBasedUnrevokable(decisionVoters);
468

    
469
        cdmPermissionEvaluator = new CdmPermissionEvaluator();
470
        cdmPermissionEvaluator.setAccessDecisionManager(accessDecisionManager);
471

    
472
        return cdmPermissionEvaluator;
473
    }
474

    
475
    @Override
476
    public void authenticate(String username, String password){
477
        UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);
478
        Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);
479
        SecurityContext context = SecurityContextHolder.getContext();
480
        context.setAuthentication(authentication);
481
    }
482

    
483
    public IIOService getIOService() {
484
        return (IIOService) getService(IIOService.class, "/remoting/io.service", new AuthenticatingHttpInvokerRequestExecutor());
485
    }
486

    
487
    @Override
488
    public ILongRunningTasksService getLongRunningTasksService() {
489
        return (ILongRunningTasksService) getService(ILongRunningTasksService.class, "/remoting/longrunningtasks.service", new AuthenticatingHttpInvokerRequestExecutor());
490
    }
491

    
492
    public ITestService getTestService() {
493
        return (ITestService) getService(ITestService.class, "/remoting/test.service", new AuthenticatingHttpInvokerRequestExecutor());
494
    }
495
}
(2-2/8)