Создание собственного URL в веб-приложении Java EE - PullRequest
1 голос
/ 16 января 2012

Я пишу простое небольшое приложение, которое представляет собой систему бронирования. В системе есть две роли: администратор и пользователь. Все запросы работают через единственный сервлет. Index.jsp (страница входа для пользователя и администратора) работает без его помощи. Итак, у меня есть начальный URL, который выглядит так:

локальный: 8080 / [AppName] /index.jsp

Для обеспечения безопасности я написал фильтр, который не позволит анонимным пользователям заходить на любую страницу, кроме index.jsp; Админ заходит на страницу пользователя, а пользователь заходит на страницу администратора. Но проблема в том, что я не могу правильно сопоставить фильтр, потому что все URL в моем приложении выглядят так:

локальный: 8080 команда / [AppName] / сервлет = [Имя_команды]

Из-за этого, такое отображение, например (конечно, в web.xml фильтр уже описывал до этого отображения):

<filter-mapping>
    <filter-name>Security</filter-name>
    <url-pattern>/servlet?command=[commandName]</url-pattern>
</filter-mapping>

не работает, и мне это совсем не нравится, потому что в этом случае необходимо прописать все команды приложения. В связи с этим у меня есть идея сделать URL при входе в smbdy следующим образом:

localhost: 8080 / [AppName] / user - для пользователя

localhost: 8080 / [AppName] / admin - для администратора

В папке web-inf у меня есть внутренняя папка "pages", в которой есть несколько внутренних папок: "error", "admin" и "user", которые хранят страницы jsp для этих ролей и ошибок.

Как реализовать предложенную идею? Я подозреваю, что это довольно тривиально, но я не нашел ответа, потому что я даже не знаю, как назвать мою проблему.

Ответы [ 2 ]

0 голосов
/ 17 января 2012

Я думаю, я понял это сейчас; Сначала создайте начальный сервлет (index.jsp не является сервлетом), когда пользователь заходит на вашу страницу, он перенаправляется на нее. Например localhost: 8080 / YouWebAppName / IndexServlet.

IndexServlet проверяет, установлен ли сеанс, если нет, он перенаправляет на доступный index.jsp, если сеанс установлен, то он проверяет роль, если роль установлена ​​на пользователя, он перенаправляет на localhost: 8080 / YourWebAppName / UserServlet, если сеанс установлен на Admin, он перенаправляет на localhost: 8080 / YourWebAppName / AdminServlet.

В сервлете Admin и User вы в первую очередь проверяете, равна ли переменная сеанса соответственно user / admin.

Если есть методы, которыми вы хотите поделиться в обоих сервлетах, сделайте так, чтобы третий сервлет вызывал его так, как вы хотите, а затем UserServlet и AdminServlet должны расширить этот сервлет

0 голосов
/ 16 января 2012

У меня недавно было что-то похожее в моем проекте, попробуйте так:

<servlet-mapping>
    <servlet-name>YourServletName</servlet-name>
    <url-pattern>/YourServletName/*</url-pattern>
</servlet-mapping>

В коде сервлета у меня есть метод:

protected String getActionSegment(HttpServletRequest request) {
    String action = request.getRequestURI().
        replace(request.getContextPath() + 
            request.getServletPath(), "").
                replace("/", "").
                    trim();
    return action.length() > 0 ? action : "index"; 
}

Этот метод возвращаетимя действия, если URL-адрес localhost: 8080 / MyWebApp / MyServlet, то по умолчанию он перенаправляет на index.jsp (вы можете это изменить). В методе выполнения сервлета вы просто определяете, что он должен делать (и куда перенаправлять)например, в каждом случае:

    if(action.equals("admin")) {
       //do something
    } else if (action.equals("user")) {
       //do something else
    }

Дайте мне знать, если вы это имели в виду.Кстати, вы также можете ограничить доступ к папке jsp и заставить ее работать, только если сервлет перенаправляет на jsp.

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