我正在使用 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。谢谢 :)