Аутентификация пользователя с использованием сервлета 3.0, вход в JSF 2 не работает - PullRequest
2 голосов
/ 06 октября 2011

Попытка создать приложение со страницей входа и с использованием метода входа Servlet 3.0. Я определил область в tomcat и настроил web.xml соответственно. Но когда я пытаюсь получить доступ к любой странице, даже странице входа, она не отображается, и я вижу теги JSF в коде. Я не знаю, что я что-то упустил. Подробности как следовать Вот что я поместил в web.xml.

<security-constraint>
<display-name>Restricted</display-name>
  <web-resource-collection>
    <web-resource-name>Restricted Area</web-resource-name>
    <url-pattern>/faces/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
<role-name>user</role-name>
  </auth-constraint>
 </security-constraint>
 <login-config>
   <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/index.xhtml</form-login-page>
        <form-error-page>/index.xhtml</form-error-page>
    </form-login-config>
</login-config>
<security-role>
  <role-name>user</role-name>
</security-role>

Ниже приводится область, определенная в tomcat

<Realm className="org.apache.catalina.realm.JDBCRealm" driverName="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/db_name?user=user&amp;password=password"
            userTable="users" userNameCol="username" userCredCol="userpass"
            userRoleTable="user_roles" roleNameCol="rolename" digest="MD5"/>

Код для входа в систему

public String login(){
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    try {
        //Login via the Servlet Context
        request.login(username, password);
        return "success";
    } catch (ServletException e) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid Login", null));
        e.printStackTrace();
    }
    return "failure";
}

Дайте мне знать, что я делаю что-то не так


Обновление Спасибо, ребята, все заработало. Мне пришлось изменить некоторые отображения URL-адресов в файле web.xml и переставить папки для параметров безопасности. В настоящее время это работает, но теперь просто странная проблема. Я определил

<form-login-config>
 <form-login-page>/index.xhtml</form-login-page>
 <form-error-page>/index.xhtml</form-error-page>
</form-login-config>

А теперь web.xml показывает ошибку на

<form-login-page>

и жалуется, что

Описание Ошибка типа пути к ресурсу: Атрибут ссылается на страницу с ошибкой формы /index.jsp, которой нет в веб-контенте web.xml / XXXX / WebContent / WEB-INF

Я понятия не имею, откуда это исходит, поскольку я не использую какой-либо JSP-файл. Любые подсказки

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Итак, FacesServlet не был вызван.Это означает, что URL страницы входа не соответствует шаблону URL FacesServlet, как вы определили в web.xml.В соответствии с шаблоном URL вашей запрещенной зоны, установленным на /faces/*, я буду считать, что это тот же шаблон URL, который вы определили для FacesServlet.

. Итак, исправьте этосоответственно:

<form-login-page>/faces/index.xhtml</form-login-page>
<form-error-page>/faces/index.xhtml</form-error-page>

Тем не менее, я бы предложил вместо этого использовать отображение FacesServlet на *.xhtml, чтобы вам никогда не приходилось беспокоиться ни о том, чтобы указать /faces в пути, ни о том, что конечный пользовательсможет видеть необработанный исходный код JSF всякий раз, когда конечный пользователь удаляет /faces из URL-адреса в адресной строке браузера.


Обновление : это ошибка проверки для среды IDE.Используемая вами IDE притворяется умнее, чем есть на самом деле.Если ваше веб-приложение работает и работает нормально, просто проигнорируйте его.При необходимости вы можете отключить проверку IDE XML в ее настройках.

0 голосов
/ 06 октября 2011

Установите

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

в web.xml и измените (в разделе <security-constraint>)

<url-pattern>/faces/*</url-pattern>

на

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