[ovirt-devel] How To Auto Set oVirt RESTApi Session?

Alexander Wels awels at redhat.com
Thu Dec 4 16:19:44 UTC 2014


On Thursday, December 04, 2014 10:57:43 AM 王成俊 wrote:
> I'm sorry I did not explain my needs clearly.
> 
> In my case,I want to redesign the WebAdmin login GUI and add some
> javascript in my WebAdmin login page to do many own logic.At present I
> don't know how to add javascript in gwt framework,so I have to make a
> servlet to alternative the original WebAdmin login GUI.
> 
> After admin user log in the WebAdmin Portal through my servlet,UIPlugin
> which use restapi to get data in the portal cannot automate get the
> user's certificate,the uiplugin show me a prompt to input the username and
> password.
> 

Okay so if I understand correctly there are 2 parts to your issue.

1. You want an alternate login screen for which you wrote your own servlet 
that displays your login screen.
2. You have a UI plugin that needs the rest api credentials to make calls to 
the REST api.

- For 1, A consequence of what you are describing to me, is that you will need 
to compile and package ovirt with your custom extension yourself. Which may 
potentially break if we ever make changes to the code. I highly suggest you 
keep an eye out for the SSO capability we are working on in 3.6. But for now I 
guess you can do the following, which can and probably will break with each 
version of ovirt.

The source code for the login window in webadmin is in:
rontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/login/presenter 
and view. You can alter it whatever way you want to do your custom stuff. 
However this requires you to know GWT.

If you want to do the servlet approach:
 look in 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java
at the login and logOff methods. Do something similar to that in your servlet 
when you submit the form from your servlet. After you login, you can redirect 
the browser to the webadmin URL, at that point it should recognize you are 
logged in and show the webadmin while bypassing the original login screen. 
This will work if you servlet lives in the same context as the webadmin 
servlet.

Again, both of these approached will probably work, but depend on internal 
code which can and will change over time, so you will have to maintain your 
code to match. When the SSO capability is fully rolled out you should be able 
to write your own login screen that doesn't depend on internal structures 
which will make maintaining that much easier for you. I believe this is 
scheduled for the 3.6 timeframe.

- For 2, in your UI plugin, you need to hook into the RestApiSessionAcquired 
event. Its use is described here [1]. You can pass the session id in that 
event as a header to your request to the REST api and that makes the requests 
succeed. Examples of code that do that are available in the sample UI plugins 
on that page.

Alexander

[1] http://www.ovirt.org/Features/UIPlugins#REST_API_integration

> I am looking forward to your guide!
> 
>         Thanks!
> 
> Best regards!
> 
> 2014-12-03 1:04 GMT+08:00 Vojtech Szocs <vszocs at redhat.com>:
> > ----- Original Message -----
> > 
> > > From: "Alexander Wels" <awels at redhat.com>
> > > To: "王成俊" <wcj2007 at gmail.com>
> > > Cc: devel at ovirt.org
> > > Sent: Tuesday, December 2, 2014 1:59:21 PM
> > > Subject: Re: [ovirt-devel] How To Auto Set oVirt RESTApi Session?
> > > 
> > > On Tuesday, December 02, 2014 09:45:49 AM 王成俊 wrote:
> > > > Hi,awels:
> > > >      Thanks for your reply!
> > > >      
> > > >      I make this servlet to run the backend action which
> > > > 
> > > > names "LoginAdminUser", because I want to check admin log in with
> > > > it,so
> > > > that my engine no need to log in through engine's loginpopupview.
> > 
> > Hm, so you're trying to automate WebAdmin GUI login? Can you please
> > explain your use case without any technical (servlet etc.) details?
> > 
> > > >      But when I log in through my servlet,the restapi can not get the
> > > > 
> > > > user's certificate.
> > > > 
> > > >      Can you tell me how to set and resume the restapi session in my
> > 
> > case?
> > 
> > > >      Thanks!
> > > > 
> > > > Best Regards!
> > > 
> > > You can login to the REST api using standard http connection techniques.
> > 
> > For
> > 
> > > instance basic auth you can login doing the following:
> > > 
> > > http://<user>%40<domain>:<password>@<engine_host>/ovirt-engine/api
> > > 
> > > Will list the available REST api.
> > > 
> > > But I am still not clear on what you are trying to do. Are you trying to
> > > write
> > > your own external servlet, that calls the REST api to do things for you?
> > 
> > Or
> > 
> > > are you trying to write a servlet that lives inside the context of the
> > 
> > engine
> > 
> > > and implements a new action?
> > > 
> > > Also please reply all, so we can keep the discussion on the mailing list
> > 
> > so
> > 
> > > other people can find it in the future.
> > > 
> > > Alexander
> > > 
> > > > 2014-12-02 5:42 GMT+08:00 Alexander Wels <awels at redhat.com>:
> > > > > On Monday, December 01, 2014 04:56:04 PM 王成俊 wrote:
> > > > > > Dear Sir:
> > > > > > 
> > > > > >          I am a new one in studing ovirt engine.Now,I have a
> > 
> > Servlet in
> > 
> > > > > > org.ovirt.engine.ui.frontend.server.gwt package.
> > > > > > 
> > > > > >          I want to call
> > 
> > *Frontend.getInstance().getLoginHandler().**onLoginSuccess(userName,
> > 
> > > > > > password, domain)* to set session for restapi in this servlet.
> > > > > > 
> > > > > >          But when I visit this servlet,it occur to show me an
> > > > > >          error
> > > > > >          which
> > > > > > 
> > > > > > just like "*JBWEB000071: root cause
> > 
> > java.lang.ClassNotFoundException:
> > > > > > org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback from
> > 
> > [Module
> > 
> > > > > > &quot;deployment.engine.ear.webadmin.war:main&quot; from Service
> > 
> > Module
> > 
> > > > > > Loader]*". I found that this error is occured by calling*
> > > > > > Frontend.getInstance()*.
> > > > > > 
> > > > > >          Can you tell me how to resolve this problem or a new way
> > 
> > to
> > 
> > > > > >          set
> > > > > > 
> > > > > > and resume restapi session in a servlet package of
> > > > > > org.ovirt.engine.ui.front.server.gwt like the
> > 
> > RestApiSessionManager in
> > 
> > > > > > org.ovirt.engine.ui.webadmin.plugin.restapi package?
> > > > > > 
> > > > > >            thanks!
> > > > > > 
> > > > > > Best Regards!
> > > > > 
> > > > > Hi,
> > > > > 
> > > > > The problem you are experiencing is the fact the
> > 
> > Frontend.getInstance()
> > 
> > > > > is
> > > > > a
> > > > > frontend (client, which get compiled to javascript) class, and the
> > > > > servlet
> > > > > is
> > > > > on the server side where this class is not defined (as it is
> > > > > frontend
> > > > > only).
> > > > > Maybe if you could explain what you are trying to do we could assist
> > > > > better.
> > > > > 
> > > > > We have a mechanism of getting the REST api session on the front end
> > 
> > when
> > 
> > > > > you
> > > > > log in. On the backend you don't really need that, since you are on
> > 
> > the
> > 
> > > > > backend. So your question sort of confuses me at this point.
> > > > > 
> > > > > Alexander
> > > 
> > > _______________________________________________
> > > Devel mailing list
> > > Devel at ovirt.org
> > > http://lists.ovirt.org/mailman/listinfo/devel




More information about the Devel mailing list