JAX-RS和CDI - 注入有状态会话bean:s​​etter不起作用

时间:2014-11-02 14:15:22

标签: java session jax-rs cdi stateful-session-bean

我正在使用RESTEasy开发Web服务。

我有一个"身份验证" webservice有两种方法:" login"和"退出"。

我有一个有状态会话范围的bean,UserData有两个属性:" loggedIn",boolean," userId",Integer。

我正在我的Authentication类中注入UserData。它适用于" loggedIn"属性,当我打电话"登录"方法,它设置为true,然后在会话结束前保持为真。

但奇怪的是它并没有与" userId"属性。当我打电话给#34;登录"方法,我将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"的代码class:

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

}

无论有没有"有状态"和#34;无状态"注解。没有改变任何事情。

我真的不知道该怎么做。

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

编辑:BTW,我在WildFly服务器上使用Weld和RestEASY。 谢谢:))

0 个答案:

没有答案