Hello!
I'm already putting in authenticate method the security context in
SecurityContextHolder:
SecurityPluginSecuritySubject securityPluginSecuritySubject = new
SecurityPluginSecuritySubject(
authenticationContext.subjectId(),
authenticationContext.subjectType(),
authenticationContext.credentials().getLogin(),
authenticationContext.address()
);
SecurityContext securityContext = new
SecurityPluginSecurityContext(securityPluginSecuritySubject);
SecurityContextHolder.set(securityContext);
But when I want to authorize, i'm getting NULL on SecurityContextHolder
Thank's you!
________________________________
De: Ilya Kasnacheev <[email protected]>
Enviado: lunes, 18 de febrero de 2019 12:10
Para: Sergio Hernández Martínez
Cc: [email protected]
Asunto: Re: Authorization Plugin
Hello!
I guess you will have to fill this context yourself for calls which supply null
as context. Then maybe put it in holder.
Regards,
--
Ilya Kasnacheev
сб, 16 февр. 2019 г. в 16:28, Sergio Hernández Martínez
<[email protected]<mailto:[email protected]>>:
Hi Ilya,
Thank you for you tip, but push(), pop() is in master code. I'm using stable
version 2.7.0 and i'm getting the same error. My new code is:
public SecurityContext authenticate(AuthenticationContext
authenticationContext) throws IgniteCheckedException {
if (authenticationContext.credentials().getLogin()==null) {
System.out.println("Usuario: null is not Authorizated to Connect");
return null;
}
System.out.println("subjectId: " +
authenticationContext.subjectId().toString());
SecurityPluginSecuritySubject securityPluginSecuritySubject = new
SecurityPluginSecuritySubject(
authenticationContext.subjectId(),
authenticationContext.subjectType(),
authenticationContext.credentials().getLogin(),
authenticationContext.address()
);
SecurityContext securityContext = new
SecurityPluginSecurityContext(securityPluginSecuritySubject);
SecurityContextHolder.set(securityContext);
return securityContext;
}
public void authorize(String s, SecurityPermission securityPermission,
@Nullable SecurityContext securityContext) throws SecurityException {
if (securityContext==null) {
if (SecurityContextHolder.get().subject().login().equals("test-user")) {
System.out.println("You can entry");
} else {
throw new SecurityException("You cannot entry");
}
}
}
And the error message in ignite node is:
[14:21:27,829][SEVERE][client-connector-#48][ClientListenerNioListener] Failed
to process client request
[req=o.a.i.i.processors.platform.client.cache.ClientCacheCreateWithConfigurationRequest@af561fe]
java.lang.NullPointerException
at
org.serhermar.ignite.security.SecurityPluginProcessor.authorize(SecurityPluginProcessor.java:74)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.authorizeCacheCreate(GridCacheProcessor.java:3738)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.authorizeCacheChange(GridCacheProcessor.java:3756)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.initiateCacheChanges(GridCacheProcessor.java:3665)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.lambda$dynamicStartCache$0(GridCacheProcessor.java:3232)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.dynamicStartCache(GridCacheProcessor.java:3245)
at
org.apache.ignite.internal.processors.cache.GridCacheProcessor.dynamicStartCache(GridCacheProcessor.java:3153)
at org.apache.ignite.internal.IgniteKernal.createCache(IgniteKernal.java:2922)
at
org.apache.ignite.internal.processors.platform.client.cache.ClientCacheCreateWithConfigurationRequest.lambda$process$0(ClientCacheCreateWithConfigurationRequest.java:57)
at
org.apache.ignite.internal.processors.platform.client.ClientRequest.runWithSecurityExceptionHandler(ClientRequest.java:70)
at
org.apache.ignite.internal.processors.platform.client.cache.ClientCacheCreateWithConfigurationRequest.process(ClientCacheCreateWithConfigurationRequest.java:57)
at
org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:57)
at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:162)
at
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:45)
at
org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
at
org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
at
org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
at
org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
SecurityContextHolder.get().subject().login() is null.
Thanks you!
________________________________
De: Ilya Kasnacheev
<[email protected]<mailto:[email protected]>>
Enviado: jueves, 14 de febrero de 2019 17:11
Para: [email protected]<mailto:[email protected]>
Asunto: Re: Authorization Plugin
Hello!
Please refer to SecurityContextHolder - get(), push(), pop().
When getting null you can just do SecurityContextHolder.get().
Regards,
--
Ilya Kasnacheev
пт, 8 февр. 2019 г. в 22:45, Sergio Hernández Martínez
<[email protected]<mailto:[email protected]>>:
hi everyone,
I'm developing my own authorization plugin. I've arrived to a point that i'm
blocked.
My code is:
public void authorize(String s, SecurityPermission securityPermission,
@Nullable SecurityContext securityContext) throws SecurityException {
if (securityContext.subject().login().equals("test-user")) {
System.out.println("You can entry");
} else {
System.out.println("You cannot entry");
}
}
I have a problem, always securityContext is null. But in my code i have:
public SecurityContext authenticate(AuthenticationContext
authenticationContext) throws IgniteCheckedException {
SecurityPluginSecuritySubject securityPluginSecuritySubject = new
SecurityPluginSecuritySubject(
authenticationContext.subjectId(),
authenticationContext.subjectType(),
authenticationContext.credentials().getLogin(),
authenticationContext.address()
);
return new SecurityPluginSecurityContext(securityPluginSecuritySubject);
}
In ignite code
(https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java)
i've saw:
/**
* @param op Operation to check.
* @throws SecurityException If security check failed.
*/
public void checkSecurity(SecurityPermission op) throws SecurityException {
if (CU.isSystemCache(name()))
return;
ctx.security().authorize(name(), op, null);
}
In security context always is null. Why? Am I missing something in my code?
Thank's for your help.