Как создать условия, основанные на роли пользователя, используя JSF / MyFaces? - PullRequest
3 голосов
/ 13 ноября 2008

Какие опции у меня есть для чтения ролей текущего пользователя со страниц JSP? Мне известен атрибут visibleOnUserRole="myRole" в компонентах Tomahawk, но мне нужны роли для более сложных вещей, чем простая видимость.

Ответы [ 2 ]

7 голосов
/ 13 ноября 2008

ExternalContext предоставляет информацию о пользователе и роли.

public class RolesAccess implements Serializable {

    public String getUserPrincipalName() {
        FacesContext context = FacesContext.getCurrentInstance();
        Principal principal = context.getExternalContext().getUserPrincipal();
        if(principal == null) {
            return null;
        }
        return principal.getName();
    }

    public String getUser() {
        FacesContext context = FacesContext.getCurrentInstance();
        return context.getExternalContext().getRemoteUser();
    }

    public boolean isManager() {
        FacesContext context = FacesContext.getCurrentInstance();
        return context.getExternalContext().isUserInRole("manager");
    }

}

Если вы используете JSF в сервлетах, эта информация сопоставляется со значениями, предоставляемыми HttpServletRequest .

Вы можете использовать управляемые bean-компоненты для предоставления значений представлению через Язык выражений .

<f:view>
    <h:outputLabel value="#{rolesBean.userPrincipalName}" />
    <h:outputLabel value="#{rolesBean.user}" />
    <h:outputLabel value="#{rolesBean.manager}" />
</f:view>
2 голосов
/ 06 декабря 2012

В Java EE 6 (которая не была доступна, когда на этот вопрос задавался / отвечался) вы можете тестировать роли непосредственно из переменной request в вашем коде Facelets. Это супер-удобно.

Е.Г.

<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />
...