2014-08-28 6 views
0

Я пытаюсь создать функцию входа в систему для моего сайта apache tapestry, где после входа в систему вместо кнопки «Вход» и «Регистрация» должно отображаться электронное письмо зарегистрированного пользователя, наряду с кнопкой «Выход».Apache Tapestry пользователь зарегистрировал функцию

Может ли кто-нибудь рассказать, как это реализовать наилучшим образом?

Я не могу понять, как определить, вошел ли пользователь во входную часть, чтобы отобразить различные параметры меню (я новичок в гобелене).

С уважением, Marius.

ответ

2

Аутентификация (из которой логин является частью) очень специфична для приложения. Как вы определяете пользователя (или, например, называете его «Заказчиком»), это не то, что делает инфраструктура.

Как правило, у вас будет SessionStateObject, представляющий вашего пользователя. Вы можете использовать что-то вроде этого в макете:

<t:if test="user"> 
    <t:logoutLink/> 
    <p:else> 
    <t:signInForm/> 
</t:if> 

Опять же, компоненты LogoutLink и SignInForm являются для вас осуществить.

Пользователь может подвергаться из кода Java, как:

@property @sessionState (создание = ложь) частных пользователей пользователя;

Это говорит о том, что поле пользователя связано со значением, хранящимся в сеансе HTTP; кроме того, Пользователь не будет создан при первом чтении поля; вместо этого компонент SignInForm должен назначить его поле пользователя.

0

После немного исследований по этому вопросу, я нашел следующий подход:

1) я создал интерфейс Authenticator

public interface Authenticator { 

Users getLoggedUser(); 
boolean isLoggedIn(); 
void login(String email, String password) throws AuthenticationException; 
void logout(); 
} 

2) Также создан класс, который реализует AuthenticatorImpl.java что интерфейс

public class AuthenticatorImpl implements Authenticator { 

public static final String AUTH_TOKEN = "authToken"; 

@Inject 
private StartDAO dao; 

@Inject 
private Request request; 

public void login(String email, String password) throws AuthenticationException 
{ 

    Users user = dao.findUniqueWithNamedQuery("from Users u where u.Email = '" + email + "' and u.Password = '" + password + "'"); 

    if (user == null) { throw new AuthenticationException("The user doesn't exist"); } 

    request.getSession(true).setAttribute(AUTH_TOKEN, user); 
} 

public boolean isLoggedIn() 
{ 
    Session session = request.getSession(false); 
    if (session != null) { return session.getAttribute(AUTH_TOKEN) != null; } 
    return false; 
} 

public void logout() 
{ 
    Session session = request.getSession(false); 
    if (session != null) 
    { 
     session.setAttribute(AUTH_TOKEN, null); 
     session.invalidate(); 
    } 
} 

public Users getLoggedUser() 
{ 
    Users user = null; 

    if (isLoggedIn()) 
    { 
     user = (Users) request.getSession(true).getAttribute(AUTH_TOKEN); 
    } 
    return user; 
} 
} 

3) Создан соответствующее связывание в классе AppModule.java

public static void bind(ServiceBinder binder) 
{ 
    binder.bind(StartDAO.class, StartDAOImpl.class); 
    binder.bind(Authenticator.class, AuthenticatorImpl.class); 
} 

4) И на моей странице Layout.java я использовал это следующим образом

@Property 
private Users user; 

@Inject 
private Authenticator authenticator; 

void setupRender() 
{ 
    if(authenticator.getLoggedUser().getAccountType().equals("Administrator")){ 
     administrator = authenticator.getLoggedUser(); 
    } 

    user = authenticator.getLoggedUser(); 

} 

Object onLogout(){ 
    authenticator.logout(); 
    return Login.class; 
} 

Layout.tml

<t:if test="user"> 
     <span class="navbar-right btn navbar-btn" style="color: white;"> 
      Welcome ${user.Name}! <a t:type="eventLink" t:event="Logout" href="#">(Logout)</a> 
     </span> 
    </t:if> 
    <t:if negate="true" test="user"> 
     <span class="navbar-right"> 
       <t:pagelink page="user/create" class="btn btn-default navbar-btn">Register</t:pagelink> 
       <t:pagelink page="user/login" class="btn btn-default navbar-btn">Sign in</t:pagelink> 
     </span> 
    </t:if> 

Это работает для меня без каких-либо проблем. Надеюсь, что это помогает другим.

С уважением, Marius.

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

  • Нет связанных вопросов^_^