You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Per Newgro <pe...@gmx.ch> on 2021/03/07 08:58:20 UTC

Extend session metadata with user-data-scope after login (spring question)

Hi,

i would like to extend a session (metadata) with scope of user logged in. Something like "allowed countries", "allowed companies" and so on.
That scope is provided by a spring bean (UserScopeFinder). This bean is created in a Configuration as a @Bean.

What i tried so far is add an ISessionListener to WebApplication and inject the UserScopeFinder.

<code>
@com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension
public class AuthorizationInitializer implements com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration {

	@Override
	public void init(WebApplication webApplication) {
		IAuthorizationStrategy strategy;
		strategy = new ApplicationAuthorizationStrategy(new UserRolesAuthorizer());
		webApplication.getSecuritySettings().setAuthorizationStrategy(strategy);
		webApplication.getSessionListeners().add(new UserScopeInjector());
	}
}

public class UserScopeInjector implements ISessionListener {

	@SpringBean(name = "userScopeFinder")
	private UserScopeFinder userScopeFinder;

	public UserScopeInjector() {
		super();
		Injector.get().inject(this);
	}

	@Override
	public void onCreated(Session session) {
		System.out.println("Works");
	}
}
</code>

But in that case i get:

<error>
...
Caused by: java.lang.RuntimeException: error while injecting object [my.app.core.wicket.authorization.UserScopeInjector@283465af] of type [my.app.core.wicket.authorization.UserScopeInjector]
	at org.apache.wicket.injection.Injector.inject(Injector.java:122)
	at org.apache.wicket.spring.injection.annot.SpringComponentInjector.inject(SpringComponentInjector.java:124)
	at my.app.core.wicket.authorization.UserScopeInjector.<init>(UserScopeInjector.java:17)
	at my.app.core.wicket.authorization.AuthorizationInitializer.init(AuthorizationInitializer.java:19)
	at com.giffing.wicket.spring.boot.starter.app.WicketBootSecuredWebApplication.init(WicketBootSecuredWebApplication.java:83)
	at org.apache.wicket.Application.initApplication(Application.java:762)
	at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:441)
	... 47 common frames omitted
Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
	at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931)
	at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631)
	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
	at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:332)
	at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96)
	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94)
	at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
	at net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119)
	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294)
	at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480)
	at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:305)
	at org.apache.wicket.proxy.LazyInitProxyFactory.createProxy(LazyInitProxyFactory.java:191)
	at org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory.getFieldValue(AnnotProxyFieldValueFactory.java:166)
	at org.apache.wicket.injection.Injector.inject(Injector.java:111)
	... 53 common frames omitted
</error>

I'm a little bit lost, if my strategy is working in common. Has someone maybe an example for me?

Thanks for your support
Per

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Aw: Re: Extend session metadata with user-data-scope after login (spring question)

Posted by Per Newgro <pe...@gmx.ch>.
Thanks Sven,

great. Works.

> Gesendet: Sonntag, 07. März 2021 um 11:58 Uhr
> Von: "Sven Meier" <sv...@meiers.net>
> An: users@wicket.apache.org
> Betreff: Re: Extend session metadata with user-data-scope after login (spring question)
>
> Hi,
> 
> Wicket tries to create a proxy for your bean.
> 
> Apparently UserScopeFinder doesn't have a default constructor, which is 
> required for creation of a proxy class.
> Easiest solution is to introduce an interface (e.g. IUserScopeFinder) 
> and let your bean implement that:
> 
>      @SpringBean(name = "userScopeFinder")
>      private IUserScopeFinder userScopeFinder;
> 
> Hope this helps
> Sven
> 
> 
> On 07.03.21 09:58, Per Newgro wrote:
> > Hi,
> >
> > i would like to extend a session (metadata) with scope of user logged in. Something like "allowed countries", "allowed companies" and so on.
> > That scope is provided by a spring bean (UserScopeFinder). This bean is created in a Configuration as a @Bean.
> >
> > What i tried so far is add an ISessionListener to WebApplication and inject the UserScopeFinder.
> >
> > <code>
> > @com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension
> > public class AuthorizationInitializer implements com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration {
> >
> > 	@Override
> > 	public void init(WebApplication webApplication) {
> > 		IAuthorizationStrategy strategy;
> > 		strategy = new ApplicationAuthorizationStrategy(new UserRolesAuthorizer());
> > 		webApplication.getSecuritySettings().setAuthorizationStrategy(strategy);
> > 		webApplication.getSessionListeners().add(new UserScopeInjector());
> > 	}
> > }
> >
> > public class UserScopeInjector implements ISessionListener {
> >
> > 	@SpringBean(name = "userScopeFinder")
> > 	private UserScopeFinder userScopeFinder;
> >
> > 	public UserScopeInjector() {
> > 		super();
> > 		Injector.get().inject(this);
> > 	}
> >
> > 	@Override
> > 	public void onCreated(Session session) {
> > 		System.out.println("Works");
> > 	}
> > }
> > </code>
> >
> > But in that case i get:
> >
> > <error>
> > ...
> > Caused by: java.lang.RuntimeException: error while injecting object [my.app.core.wicket.authorization.UserScopeInjector@283465af] of type [my.app.core.wicket.authorization.UserScopeInjector]
> > 	at org.apache.wicket.injection.Injector.inject(Injector.java:122)
> > 	at org.apache.wicket.spring.injection.annot.SpringComponentInjector.inject(SpringComponentInjector.java:124)
> > 	at my.app.core.wicket.authorization.UserScopeInjector.<init>(UserScopeInjector.java:17)
> > 	at my.app.core.wicket.authorization.AuthorizationInitializer.init(AuthorizationInitializer.java:19)
> > 	at com.giffing.wicket.spring.boot.starter.app.WicketBootSecuredWebApplication.init(WicketBootSecuredWebApplication.java:83)
> > 	at org.apache.wicket.Application.initApplication(Application.java:762)
> > 	at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:441)
> > 	... 47 common frames omitted
> > Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
> > 	at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931)
> > 	at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631)
> > 	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
> > 	at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:332)
> > 	at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
> > 	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96)
> > 	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94)
> > 	at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
> > 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> > 	at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
> > 	at net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
> > 	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119)
> > 	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294)
> > 	at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480)
> > 	at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:305)
> > 	at org.apache.wicket.proxy.LazyInitProxyFactory.createProxy(LazyInitProxyFactory.java:191)
> > 	at org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory.getFieldValue(AnnotProxyFieldValueFactory.java:166)
> > 	at org.apache.wicket.injection.Injector.inject(Injector.java:111)
> > 	... 53 common frames omitted
> > </error>
> >
> > I'm a little bit lost, if my strategy is working in common. Has someone maybe an example for me?
> >
> > Thanks for your support
> > Per
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> > For additional commands, e-mail: users-help@wicket.apache.org
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Extend session metadata with user-data-scope after login (spring question)

Posted by Sven Meier <sv...@meiers.net>.
Hi,

Wicket tries to create a proxy for your bean.

Apparently UserScopeFinder doesn't have a default constructor, which is 
required for creation of a proxy class.
Easiest solution is to introduce an interface (e.g. IUserScopeFinder) 
and let your bean implement that:

     @SpringBean(name = "userScopeFinder")
     private IUserScopeFinder userScopeFinder;

Hope this helps
Sven


On 07.03.21 09:58, Per Newgro wrote:
> Hi,
>
> i would like to extend a session (metadata) with scope of user logged in. Something like "allowed countries", "allowed companies" and so on.
> That scope is provided by a spring bean (UserScopeFinder). This bean is created in a Configuration as a @Bean.
>
> What i tried so far is add an ISessionListener to WebApplication and inject the UserScopeFinder.
>
> <code>
> @com.giffing.wicket.spring.boot.context.extensions.ApplicationInitExtension
> public class AuthorizationInitializer implements com.giffing.wicket.spring.boot.context.extensions.WicketApplicationInitConfiguration {
>
> 	@Override
> 	public void init(WebApplication webApplication) {
> 		IAuthorizationStrategy strategy;
> 		strategy = new ApplicationAuthorizationStrategy(new UserRolesAuthorizer());
> 		webApplication.getSecuritySettings().setAuthorizationStrategy(strategy);
> 		webApplication.getSessionListeners().add(new UserScopeInjector());
> 	}
> }
>
> public class UserScopeInjector implements ISessionListener {
>
> 	@SpringBean(name = "userScopeFinder")
> 	private UserScopeFinder userScopeFinder;
>
> 	public UserScopeInjector() {
> 		super();
> 		Injector.get().inject(this);
> 	}
>
> 	@Override
> 	public void onCreated(Session session) {
> 		System.out.println("Works");
> 	}
> }
> </code>
>
> But in that case i get:
>
> <error>
> ...
> Caused by: java.lang.RuntimeException: error while injecting object [my.app.core.wicket.authorization.UserScopeInjector@283465af] of type [my.app.core.wicket.authorization.UserScopeInjector]
> 	at org.apache.wicket.injection.Injector.inject(Injector.java:122)
> 	at org.apache.wicket.spring.injection.annot.SpringComponentInjector.inject(SpringComponentInjector.java:124)
> 	at my.app.core.wicket.authorization.UserScopeInjector.<init>(UserScopeInjector.java:17)
> 	at my.app.core.wicket.authorization.AuthorizationInitializer.init(AuthorizationInitializer.java:19)
> 	at com.giffing.wicket.spring.boot.starter.app.WicketBootSecuredWebApplication.init(WicketBootSecuredWebApplication.java:83)
> 	at org.apache.wicket.Application.initApplication(Application.java:762)
> 	at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:441)
> 	... 47 common frames omitted
> Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
> 	at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931)
> 	at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631)
> 	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
> 	at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:332)
> 	at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
> 	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96)
> 	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94)
> 	at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
> 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> 	at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
> 	at net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
> 	at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119)
> 	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294)
> 	at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480)
> 	at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:305)
> 	at org.apache.wicket.proxy.LazyInitProxyFactory.createProxy(LazyInitProxyFactory.java:191)
> 	at org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory.getFieldValue(AnnotProxyFieldValueFactory.java:166)
> 	at org.apache.wicket.injection.Injector.inject(Injector.java:111)
> 	... 53 common frames omitted
> </error>
>
> I'm a little bit lost, if my strategy is working in common. Has someone maybe an example for me?
>
> Thanks for your support
> Per
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org