JSF 2.0 Простая страница входа - PullRequest
       3

JSF 2.0 Простая страница входа

4 голосов
/ 20 сентября 2010

Мне нужно ограничить доступ к части приложения. Чтобы получить доступ к этой части, пользователь должен войти в систему. В моей базе данных есть таблица с именем пользователя, с именами пользователей и хэшированными паролями, а также форма входа в систему, которая состоит из двух входов и отправки. Однако я не знаю, какие классы / математические выражения следует использовать для входа в систему пользователя (я предполагаю, что в jsf есть поддержка этой функции). Также, насколько мне известно, мне нужно отредактировать мой web.xml для поддержки аутентификации. Может ли кто-нибудь предложить типичные решения и общие шаги, которые мне нужно сделать для того, чтобы получить эту функциональность (ссылки, учебные пособия по достоинству оценены)?

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

Заранее спасибо за любую помощь. Grem.

Ответы [ 2 ]

4 голосов
/ 05 ноября 2010

Вы можете использовать API HttpServletRequest, представленный в Servlet 3.0:

    /**
     * Performs authentication via HttpServletRequest API
     */
    public String login(String username, String password) throws IOException {
        try {
            getRequest().login(username, password);
            this.user = userDao.find(username);
        } catch (ServletException e) {
            JsfUtil.addErrorMessage(JsfUtil.getStringResource("loginFailed"));
            return null;
        }
        return "/index?faces-redirect=true";
    }

    public String logout() throws ServletException {
        this.user = null;
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
        if (isAuthenticated())
           getRequest().logout();
        return "logout";
    }

    public boolean isAuthenticated() {
        return getRequest().getUserPrincipal() != null;
    }

    public static HttpServletRequest getRequest() {
        Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
        return request instanceof HttpServletRequest
                ? (HttpServletRequest) request : null;
    }
2 голосов
/ 20 сентября 2010

Вы можете использовать j_security_check.Все, что вы делаете, это публикуете его, и он будет обрабатывать аутентификацию на основе определенной вами области и конфигурации конкретного приложения в вашем файле web.xml.

В зависимости от вашего сервера приложений, есть дополнительный шаг связывания определенной роли (специфичной для приложения) с группой (специфичной для области).

Вот типичная конфигурация:

<servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>com.example.Login</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>Error</servlet-name>
    <servlet-class>com.example.Error</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Error</servlet-name>
    <url-pattern>/Error</url-pattern>
</servlet-mapping>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>example.com</realm-name>
    <form-login-config>
        <form-login-page>/Login</form-login-page>
        <form-error-page>/Error</form-error-page>
    </form-login-config>
</login-config>

<security-role>
    <role-name>arbitraryRoleName</role-name>
</security-role>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>All Pages</web-resource-name>
        <url-pattern>/index.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>arbitraryRoleName</role-name>
    </auth-constraint>
</security-constraint>

Обратите внимание на security-role.Это все еще необходимо объединить в группу или что-то еще, что вы определяете, чтобы отличать пользователей, которые могут использовать страницу, от пользователей, которые не могут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...