Bonjour tout le monde

Je travaille sur un webservice en utilisant RESTEasy.

J'ai un webservice "authentication" avec deux méthodes, "login" et "logout".

J'ai un bean qui est sessionScoped, UserData, avec deux attributs : un booléen (loggedIn) et un entier (userId).

J'injecte UserData dans ma classe JAX-RS via CDI (en utilisant Weld).

Dans la fonction login je set "loggedIn" et "userId" si l'authentification a fonctionné. Cela marche sans soucis pour le booléen, mais pour l'entier, quedal : je passe bien dans le setter, mais dès que j'en sors, "userId" reste à "null".

J'utilise un server Wildfly (et Jackson 2 pour la sérialisation).

Voici le code de la classe JAX-RS (sans la fonction logOut) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.bini.dev.dilemme.web.api;
 
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
 
import com.bini.dev.dilemme.business.service.UserService;
import com.bini.dev.dilemme.persistence.model.User;
import com.bini.dev.dilemme.web.UserData;
 
@Path("/auth")
public class AuthenticationApi {
 
    @Inject
    private UserData userData;
 
    @Inject
    private UserService userService;
 
    @GET
    @Path("login")
    @Produces("application/json")
    public UserData logIn(@QueryParam("mail") String userMail, @QueryParam("password") String userHashedPassword) {
        try {
            this.logOut();
            User user = userService.getUserByMailAddress(userMail.trim());
            if (user == null)
                throw new Exception("User does not exists");
            boolean loggedIn = userService.checkUserPassword(user, userHashedPassword.trim());
            if (loggedIn) {
                userData.setLoggedIn(true);
                userData.setUserId(user.getUserId());
            }
            return userData;
        } catch (Exception e) {
            e.printStackTrace();
            return userData;
        }
    }
}
Et le code de UserData :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.bini.dev.dilemme.web;
 
import java.io.Serializable;
 
import javax.enterprise.context.SessionScoped;
 
import com.fasterxml.jackson.annotation.JsonAutoDetect;
 
@SessionScoped
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC,
                getterVisibility = JsonAutoDetect.Visibility.NONE,
                setterVisibility = JsonAutoDetect.Visibility.NONE)
public class UserData implements Serializable {
 
    protected Boolean loggedIn;
 
    protected Integer userId;
 
    public UserData() {
        this.loggedIn = false;
        this.userId = null;
    }
    public Boolean isLoggedIn() {
        return loggedIn;
    }
 
    public void setLoggedIn(Boolean loggedIn) {
        this.loggedIn = loggedIn;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
 
}