2015-04-03 5 views
1

Я смущен тем, как я должен проверять зарегистрированного пользователя. Я думал о том, чтобы вызывать фазу с фазой, но я читал эту тему access existing instance stateful inside stateless, java ee 6Как войти в систему пользователя stateless bean

Вот моя идея.

ProductBean.java

@Stateless 
@LocalBean 
public class ProductBean { 
    @EJB private UserBean userBean; // UserBean is SFSB 
    public Product addProduct(Product product) { 
     if(userBean == null || userBean.getLoggedInUser() == null) { 
      // throw an exception 
     } 
     // persist 
    } 
} 

ProductController.java

@ManagedBean 
@RequestScope 
public class ProductController { 
    @EJB private ProductBean productBean; 
    private Product product; 
    public void addProduct() { 
     Object result = productBean.addProduct(productBean); 
    } 
} 

Спасибо заранее. :)

ответ

2

Если вы хотите, чтобы защитить ваши бобы вы скорее должны использовать механизмы безопасности Java EE, как @RolesAllowed и sessionContext.getCallerPrincipal() вместо создания собственных механизмов. Если вы выполните надлежащую проверку подлинности в веб-модуле, контекст безопасности будет распространен на EJB.

Состояние бобы не очень хорошая идея, и особенно в вашем дизайне. Вы не можете использовать бобы с состоянием в фазах без состояния, поскольку экземпляры фаз без учета состояния повторно используются среди разных вызовов/пользователей.

+0

Благодарим вас за ответ, я прочитаю статьи о контексте сеанса. Вы предложили сайт для начинающих в этой области? – bell

+0

@bell Взгляните на ссылку на учебное пособие по Java EE, которое [endriu_l] (http://stackoverflow.com/a/29427706/3701228), опубликованное в его ответе, показывает все это. – Gas

0

О защите бобов - Вы должны использовать javax.ejb.SessionContext, чтобы получить основную информацию или проверить конкретную роль и перейти оттуда.

Есть некоторые хорошие примеры, касающиеся безопасности в Oracle, Java EE 6 tutorial

Смежные вопросы