【问题标题】:EJB: how to check user is authenticatedEJB:如何检查用户是否经过身份验证
【发布时间】:2017-05-09 11:45:17
【问题描述】:

使用 JSP 表单记录:

@ManagedBean
@SessionScoped
public class LoginView {

    private String username; //+getter +setter
    private String password; //+getter +setter


    public String submit()
    {
        try {
            HttpServletRequest request = (HttpServletRequest) FacesContext
                    .getCurrentInstance()
                    .getExternalContext()
                    .getRequest();

            request.login(username, password);

        } catch (ServletException e) {
            FacesContext.getCurrentInstance().addMessage("login-form:username",
                    new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error", "Incorrect login or password"));
            return "/login";
        }
        return "/index?faces-redirect=true";
    }
}

如何通过 EJB 检查用户是否登录?

下面我需要的例子:

@Stateless
public class SessionServiceBean {

    @Resource
    SessionContext sessionContext;

    @EJB
    UserService userService;

    @Produces
    @Named
    @LoggedIn
    public User getLoggedUser() {
        if (/*  check user is logged */) {
            return userService.getByName(sessionContext.getCallerPrincipal().getName());
        }
    }

}

我只发现未记录的使用名称为“匿名”,但我认为这不是更好的方法。

【问题讨论】:

    标签: ejb-3.1 java-ee-7


    【解决方案1】:
    1. 您正在使用@Stateless EJB。在无状态 EJB 中,您正在处理用户会话。这可能不对,bean 应该是@Stateful。
    2. 我认为在您的示例中使用 EJB 没有任何意义。使用带有 @SessionScoped 注释的纯 CDI bean 就足够了。

    您可以将用户的会话信息直接存储在会话范围的 bean 中。不需要使用 HttpServletRequest。例如:

    @Named
    @SessionScoped
    public class UserSession implements Serializable {
    
        private User activeUser;
    
        public void logIn(User user) {
            this.activeUser = user;
        }
    
        public void logOut() {
            activeUser = null;
        }
    
        public boolean isLoggedIn() {
            return activeUser != null;
        }
    
        public User getActiveUser() {
            return activeUser;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2021-08-01
      相关资源
      最近更新 更多