0

我正在使用 RESTEasy 开发网络服务。

我有一个“身份验证”网络服务,有两种方法:“登录”和“注销”。

我有一个有状态的会话范围 bean,UserData,它有两个属性:“loggedIn”,布尔值和“userId”,整数。

我在我的 Authentication 类中注入 UserData。它适用于“loggedIn”属性,当我调用“login”方法时,它设置为 true,然后在会话结束之前保持为 true。

但奇怪的是它不适用于“userId”属性。当我调用“login”方法时,我将 userId 设置为我的用户 id,但在调用“setUserId”方法之后,userId 仍然为空。

这是 Authentication 类代码(没有 logOut 方法,暂时未使用):

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;
        }
    }
}

这是“UserData”类的代码:

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;
    }

}

我尝试使用或不使用“有状态”和“无状态”注释。不会改变任何东西。

我真的不知道该怎么办。

我认为这可能是一个“setter”语法错误,但我真的不知道在哪里。

编辑:顺便说一句,我在 WildFly 服务器上使用 Weld 和 RestEASY。谢谢 :)

4

0 回答 0