To me it seems there is a problem with your approach. It looks like
PadroesSession is a singleton class per entire server application, and
it holds only one request and session a time, while in a multi-client
application you will have a session for each client connection. This
means that:
- if user1 is logged in
- then user2 tries to log in
- for user 2 you want to see if a user is already logged in; you check
PadroesSession.getUser and see it returns a value (which is in fact
user1) and then you allow user2 directly into the application

So I think that per server application you should work with a list of
sessions, not just a single instance.

On Jun 16, 11:32 am, Bruno Lopes <[email protected]>
wrote:
> An serializable object from the persistence side.
>
> On Wed, Jun 16, 2010 at 6:46 AM, Magnus <[email protected]>wrote:
>
> > What's PersonDTO?
>
> > Magnus
>
> > On 3 Jun., 22:36, Bruno Lopes <[email protected]> wrote:
> > > Then on the server side for the LoginService
>
> > > public LoginResponse login(String username, String password) {
> > >         LoginPService loginService = ServiceLocator.getLoginService();
> > >         PersonDTO personDTO = null;
>
> > >         try {
>
> > >             personDTO = loginService.getUserByUsername(username);
>
> > >         if (personDTO == null){
> > >             //.getInstance().info("Utilizador n√£o encontrado:
> > "+username);
> > >             return new LoginResponse(false, false);
> > >         } else if (!loginService.checkPassword(password)){
> > >             //UCCLogger.getInstance().info("Password errada do
> > utilizador:
> > > "+username);
> > >             return new LoginResponse(false, false);
> > >         }
>
> > >         } catch (Throwable e) {
> > >             return new LoginResponse(false, false);
> > >         }
>
> > >         LoginResponse response = new LoginResponse();
> > >         response.setLoginSuccess(true);
>
> > >         PadroesSession padroesSession = PadroesSession.getInstance();
> > >         padroesSession.setRequest(getThreadLocalRequest());
>
> > >         padroesSession.setUser(personDTO);
> > > return response;
> > >     }
>
> > > On Thu, Jun 3, 2010 at 9:33 PM, Bruno Lopes
> > > <[email protected]>wrote:
>
> > > > YES
> > > > on the server side I have something like this:
>
> > > > public class PadroesSession implements Serializable{
>
> > > >     private static PadroesSession  padroesSession=null;
>
> > > >     public static PadroesSession getInstance(){
> > > >         if(padroesSession == null){
> > > >             padroesSession = new PadroesSession();
> > > >             return padroesSession;
> > > >         } else {
> > > >             return padroesSession;
> > > >         }
> > > >     }
>
> > > >     private PadroesSession(){
>
> > > >     }
>
> > > >     private static final String USER_SESSION = "userSession";
> > > >     private HttpServletRequest request = null;
> > > >     private HttpSession session = null;
>
> > > >     public PersonDTO getUser(){
>
> > > >         if(null == session) return null;
>
> > > >         return session.getAttribute(USER_SESSION) != null ?
> > > >                 (PersonDTO)session.getAttribute(USER_SESSION) : null;
>
> > > >     }
>
> > > >     public HttpSession getSession(){
> > > >         return session;
> > > >     }
>
> > > >     public void invalidate(){
> > > >         if(request!=null)
> > > >             if(request.getSession(false)!= null)
> > > >                  request.getSession(false).invalidate();
> > > >         if(null != session){
> > > >             session.invalidate();
> > > >             session = null;
> > > >         }
>
> > > >     }
>
> > > >     public void setUser(PersonDTO user){
> > > >         if(null == user){
> > > >             if(session!=null) session.removeAttribute(USER_SESSION);
> > > >             return;
> > > >         }
>
> > > >         if(null != request)
> > > >             this.session = request.getSession(true);
>
> > > >         if(session!=null) session.setAttribute(USER_SESSION, user);
> > > >     }
>
> > > >     public String getId(){
> > > >         return request.getSession(false).getId();
> > > >     }
>
> > > >     public HttpServletRequest getRequest() {
> > > >         return request;
> > > >     }
>
> > > >     public void setRequest(HttpServletRequest request) {
> > > >         this.request = request;
>
> > > >     }
>
> > > > }
>
> > > > On Thu, Jun 3, 2010 at 2:45 PM, Magnus <[email protected]
> > >wrote:
>
> > > >> Hi,
>
> > > >> thank you for the code! I adopted it to my application.
>
> > > >> So you authenticate the user via the remote service! But how do you
> > > >> actually store the user context the app is running in? Do you do some
> > > >> session management?
>
> > > >> Thanks
> > > >> Magnus
>
> > > >> On Jun 2, 7:15 pm, Bruno Lopes <[email protected]>
> > wrote:
> > > >> > Hi Alpine Bluster,
>
> > > >> > look at this code:
>
> > > >> > public void onModuleLoad() {
>
> > > >> > this.setLoginPanel();
>
> > > >> > loginButton = new Button("Login");
>
> > > >> > loginButton.addListener(new ButtonListenerAdapter() {
>
> > > >> > public void onClick(Button button, EventObject e) {
>
> > > >> > userAuthentication();
>
> > > >> > }
> > > >> > });
>
> > > >> > formPanel.addButton(loginButton);
>
> > > >> > formPanel.setBorder(false);
>
> > > >> > loginPanel.add(formPanel);
>
> > > >> > Element appPanelEl = loginPanel.getElement();
>
> > > >> > �...@suppresswarnings("unused")
>
> > > >> > KeyMap map = new KeyMap(appPanelEl, new KeyMapConfig() {
>
> > > >> > {
>
> > > >> > setKey(EventObject.ENTER);
>
> > > >> > setKeyListener(new KeyListener() {
>
> > > >> > public void onKey(int key, EventObject e) {
>
> > > >> > loginButton.focus();
>
> > > >> > }
> > > >> > });
> > > >> > }
> > > >> > });
>
> > > >> >  RootPanel.get("login_widget").add(loginPanel);
>
> > > >> > }
>
> > > >> >  private void userAuthentication() {
>
> > > >> > if (this.userNameField.getValueAsString().equals(""))
>
> > > >> > Window.alert("username must not be empty.");
>
> > > >> > else {
>
> > > >> > loginService = GWT.create(LoginService.class);
>
> > > >> > String username = this.userNameField.getValueAsString();
>
> > > >> > String password = this.passwordField.getValueAsString();
>
> > > >> > this.loginService.login(username, password,
>
> > > >> > new AsyncCallback<LoginResponse>() {
>
> > > >> > public void onFailure(Throwable caught) {
>
> > > >> > Window.alert("server side failure: " + caught);
>
> > > >> > }
>
> > > >> > public void onSuccess(LoginResponse result) {
>
> > > >> > if (result.isLoginSuccess()){
>
> > > >> > Window.Location.replace("./../Main.html");
>
> > > >> > }
>
> > > >> > else Window.alert("username or password invalid.");
>
> > > >> > }
> > > >> > });
> > > >> > }
> > > >> > }
>
> > > >> > ...
>
> > > >> > FOR LOGOUT
> > > >> > ....
>
> > > >> > private Panel northPanel = new Panel();
>
> > > >> > ....
>
> > > >> >                                 Toolbar toolbar = new Toolbar();
>
> > > >> >  ToolbarButton logoutButton = new ToolbarButton("Sign Out");
>
> > > >> > logoutButton.addListener( new ButtonListenerAdapter() {
>
> > > >> > public void onClick( Button button, EventObject e ) {
>
> > > >> > LoginServiceAsync service = GWT.create(LoginService.class);
>
> > > >> > service.logout(new AsyncCallback<Void>() {
>
> > > >> > @Override
>
> > > >> > public void onFailure(Throwable caught) {
>
> > > >> > caught.printStackTrace();
>
> > > >> >  }
>
> > > >> > �...@override
>
> > > >> > public void onSuccess(Void result) {
>
> > > >> > Window.Location.replace("./../Login.html");
>
> > > >> > }
> > > >> > });
> > > >> > }
> > > >> > });
>
> > > >> >  tabPanel = new TabPanel();
>
> > > >> >  toolbar.addFill();
>
> > > >> > toolbar.addText("welcome," + someUser..);
>
> > > >> > toolbar.addSeparator();
>
> > > >> > toolbar.addButton(logoutButton);
>
> > > >> > tabPanel.setWidth(NORMALIZE_SPACING);
>
> > > >> >  tabPanel.setTopToolbar(toolbar);
>
> > > >> > northPanel.add(tabPanel);
>
> > > >> > On Wed, Jun 2, 2010 at 5:25 PM, Magnus <
> > [email protected]>
> > > >> wrote:
> > > >> > > Hi,
>
> > > >> > > I cannot find a minimalistic example that shows how to realize a
> > > >> login/
> > > >> > > logout functionality.
> > > >> > > Could please someone point me to such an example?
>
> > > >> > > I also wonder where to put the different things. For example, the
> > code
> > > >> > > that immediately reacts on the "login" button could be placed
> > within
> > > >> > > the "client" folder of a GWT project, or it could be realized as a
> > > >> > > servlet.
>
> > > >> > > When do I use a servlet and how?
>
> > > >> > > Thank you!
> > > >> > > Magnus
>
> > > >> > > --
> > > >> > > You received this message because you are subscribed to the Google
> > > >> Groups
> > > >> > > "Google Web Toolkit" group.
> > > >> > > To post to this group, send email to
> > > >> [email protected].
> > > >> > > To unsubscribe from this group, send email to
> > > >> > > [email protected]<google-web-toolkit%[email protected]>
> > <google-web-toolkit%[email protected]<google-web-toolkit%[email protected]>
>
> > > >> <google-web-toolkit%[email protected]<google-web-toolkit%[email protected]>
> > <google-web-toolkit%[email protected]<google-web-toolkit%[email protected]>
>
> > > >> > > .
> > > >> > > For more options, visit this group at
> > > >> > >http://groups.google.com/group/google-web-toolkit?hl=en.
>
> > > >> --
> > > >> You received this message because you are subscribed to the Google
> > Groups
> > > >> "Google Web Toolkit" group.
> > > >> To post to this group, send email to
> > [email protected].
> > > >> To unsubscribe from this group, send email to
> > > >> [email protected]<google-web-toolkit%[email protected]>
> > <google-web-toolkit%[email protected]<google-web-toolkit%[email protected]>
>
> > > >> .
> > > >> For more options, visit this group at
> > > >>http://groups.google.com/group/google-web-toolkit?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Google Web Toolkit" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<google-web-toolkit%[email protected]>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/google-web-toolkit?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to