2011-12-15 3 views
0

Я новичок в Spring Security. Я использую jsf2 с пружинной безопасностью 3. Три вопрос:jsf spring security информация о пользователе

  1. Как я могу получить доступ из сеанса управляемого боба, информации о пользователе (имя, пароль, роли) пользователя в настоящее время вошло в системе?

    Чтобы использовать его в представлении, например, для элементов рендеринга в зависимости от ролей пользователя.

  2. Как узнать, когда пользователь вошел в систему? Чтобы показать в представлении «ссылку для входа», если пользователь не вошел в систему или «выход из системы», если пользователь вошел в систему. Какое свойство Spring Security я должен использовать в моем управляемом компоненте для хранения этого info и использовать его в представлении?

  3. «Ссылка для входа» - это просто запрос GET на URL-адрес страницы входа. Но как я могу показать «выход из системы»? Как это должно быть запрос POST и использовать "H: commandLink", как это ?:

    <h:commandLink value="Logout" action="#{request.contextPath}/j_spring_security_logout" /> 
    

    Или это может быть запрос GET ?:

    <h:link value="Logout" outcome="#{request.contextPath}/j_spring_security_logout" /> 
    

Спасибо очень много продвинутый.

+1

Возможно, это может оказать некоторую помощь - http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html –

ответ

1
  1. аутентификации объекта, который сохранить эти свойства, вы можете получить с следующей строкой в ​​managedBean:

    Authentication auth = SecurityContextHolder.getContext().getAuthentication();

  2. пользователь авторизован, если его проверка подлинности не instace из AnonymousAuthenticationToken, в вашем spring-security-context.xml вы должны определить URL-адреса, перехваченные Spring.

    Первый перехватчик не анализируется с помощью Spring. В этом случае объект аутентификации является экземпляром AnonymousAuthenticationToken.

    Второй перехватчик анализируется Spring и пользователь перенаправляется на страницу входа в систему объявлен в spring-security-context.xml

    /* This is a example for to obtain the rol name for example for generate automatic menu */ 
    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    String namePrincipalRol = null; 
    if (auth instanceof AnonymousAuthenticationToken) { 
        namePrincipalRol = "ROLE_ANONYMOUS"; 
    } else { 
        namePrincipalRol = auth.getAuthorities().iterator().next().getAuthority(); 
    } 
    
  3. Хороший вопрос, Я не уверен, но я думаю, что я помню, читал, что он должен быть POST, было бы интересно попробовать. Я использую час: outputLink

С уважением.

+0

Большое спасибо @Rafael за ваш ответ. Я забыл этот вопрос, который я задал давно. Я решил это по собственному прочтению о структуре и тестировании. Наконец, в вопросе (3) я также использовал h: outputLink (отображает ссылку html с href), это запрос GET, а не сообщение. Спасибо. – choquero70

+0

Добро пожаловать, спасибо за информацию. Хотя вопрос старый, ответ может быть полезен в будущем. –

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