Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF2 + JEE вопрос про авторизацию пользователей / 5 сообщений из 5, страница 1 из 1
19.08.2012, 12:12:47
    #37922037
Viktor Grafskiy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF2 + JEE вопрос про авторизацию пользователей
Здравствуйте, пытаюсь перенести приложение с GUI C# на JEE + JSF2. Пользователи должны авторизовываться в приложении на основе таблицы `users`(в таблице содержатся три поля username , зашифрованный password и роль пользователя). Прошу подсказать, каким образом возможно приделать авторизацию к программе, не завязываясь на конкретный сервер приложений. Мне необходимо что бы пользователи не прошедшие авторизацию могли бы иметь доступ только к странице login.xhtml, а пользователи, которые выполнили вход могли бы после окончания работы закрывать сессию(т.е. делать logout). Спасибо.
...
Рейтинг: 0 / 0
19.08.2012, 17:24:22
    #37922196
shaden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF2 + JEE вопрос про авторизацию пользователей
Spring Security
...
Рейтинг: 0 / 0
19.08.2012, 17:45:12
    #37922208
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF2 + JEE вопрос про авторизацию пользователей
А чем тебе штатные средства не угодили, на серваке только Realm прикрутить надо, на Tomcate точно есть DatabaseRealm на Glassfish не знаю, я Ldap использую, да полюбому есть тема распространенная
...
Рейтинг: 0 / 0
19.08.2012, 19:29:11
    #37922240
Viktor Grafskiy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF2 + JEE вопрос про авторизацию пользователей
В общем реализовал с помощью javax.servlet.Filter, вроде работает, может кому пригодиться:
1) Реализуем интерфейс Filter:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@WebFilter
public class AuthFilter implements javax.servlet.Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
// STUB
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        UserBean userBean = (UserBean) req.getSession().getAttribute("userBean");
        if (userBean == null || !userBean.isLoggedIn()) {
            res.sendRedirect(req.getContextPath() + "/login.jsf");
        } else {
            chain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {
// STUB
    }
}


2) Добаляем описание фильтра в web.xml, данная конфигурация, говорит контейнеру о том, что все запросы адресованные к файлам каталога /restricted должны проходить через сервлет AuthFilter
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
...
    <filter>
        <description>Main Authentification Filter</description>
        <filter-name>AuthFilter</filter-name>
        <filter-class>my.package.fastreports.AuthFilter</filter-class>
        <init-param>
            <param-name>loginPage</param-name>
            <param-value>/login.xhtml</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>AuthFilter</filter-name>
        <url-pattern>/restricted/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
...


3) Код управляемого бина
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
@ManagedBean
@SessionScoped
public class UserBean implements Serializable {

    @EJB
    private UserFacade userFacade;
    private String username;
    private String password;
    private User user;

// GETTERS + SETTERS
// .....

    public String doLogin() {
        user = userFacade.getUser(username, password);
        if (user != null) {
            return "/restricted/index?faces-redirect=true";
        } else {
            return "/loginFailed?faces-redirect=true";
        }
    }

    public String doLogout() {
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
        return "/login?faces-redirect=true";
    }

    public boolean isLoggedIn() {
        return user != null;
    }


4) Ну и форма авторизации:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        <h:form>
            <p:panel id="panel" header="Login Page"  >
                <h:panelGrid columns="3">
                    <h:outputLabel for="username" value="Username:" />
                    <p:inputText id="username" value="#{userBean.username}" required="true" />
                    <h:outputLabel for="password" value="Password:" />
                    <p:password id="password" value="#{userBean.password}" required="true" />
                </h:panelGrid>
            </p:panel>
            <p:commandButton value="Submit" update="panel" action="#{userBean.doLogin()}" />
        </h:form>
...
Рейтинг: 0 / 0
19.08.2012, 21:40:46
    #37922276
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF2 + JEE вопрос про авторизацию пользователей
в таком простом случае вариант с фильтром наиболее предпочтительный вы все правильно разобрались
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF2 + JEE вопрос про авторизацию пользователей / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]