0

I'm not a professional and trying to develop app with jsf. I've already made several pages, database connectivity with hibernate etc.

I have just added authentication using wildfly 13 elytron security system using form-based programmatic login with DB realm (I use mysql database).

After that I have encountered problem with page navigation (before this worked perfectly fine):

1) After launching app there is a login page: http://127.0.0.1:8080/NNManagement-0.0.1-SNAPSHOT/ 2) After successful login there should be Team.xhtml page displayed (this is what login method returns) i.e. http://127.0.0.1:8080/NNManagement-0.0.1-SNAPSHOT/resources/views/Team.xhtml. Instead there is something strange - I've got url like login page: http://127.0.0.1:8080/NNManagement-0.0.1-SNAPSHOT/Login.xhtml but the content is like Team.xhtml but not working really i.e. apart from losing styles, all the links responsible for navigation do not work - they do not redirect to specific pages but they reload this login page again and again.

Still if I paste the correct address i.e. http://127.0.0.1:8080/NNManagement-0.0.1-SNAPSHOT/resources/views/Team.xhtml everything works well.

WebContent structure is like:

  1. resources

    • styles

      content.css header.css

    • views

      Header.xhtml Network.xhtml Team.xhtml Tasks.xhtml

  2. WEB-INF

    • web.xml
    • jboss-web.xml
    • beans.xml
  3. Login.xhtml
  4. loginError.xhtml

LoginBean.java

public class LoginBean{

    private String userName;
    private String password;

    public String login() {

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();

        try {
            request.login(getUserName(), getPassword());
            System.out.println("Trying to login "+ getUserName() + " " + getPassword());
        }catch(ServletException e){
            System.out.println(e);
            context.addMessage(null, new FacesMessage("Login failed " + e));
            return "resources/loginError.xhtml";
        }

        return "resources/views/Team.xhtml";
    }

Login.xhtml

                        <div>
                            <h:outputLabel for="userName" value="User"/>
                            <h:inputText id="userName" value="#{loginBean.userName}"
                                         required="true"
                                         requiredMessege="Please enter username"
                                         class="form-control"/>
                        </div>

                        <div>
                            <h:outputLabel for="password" value="Password"/>
                            <h:inputSecret id="password" value="#{loginBean.password}"
                                           required="true"
                                           requiredMessage="Please enter password"
                                           class="form-control"/>
                        </div>

                        <div>
                            <h:commandButton action="#{loginBean.login}" value="Login"  class="btn btn-default"/>
                        </div>

web.xml


    <servlet-mapping>
        <servlet-name>FacesServlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>Login.xhtml</welcome-file>
    </welcome-file-list>

     <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>web-security-domain</realm-name>
        <form-login-config>
            <form-login-page>/Login.xhtml</form-login-page>
            <form-error-page>/loginError.xhtml</form-error-page>
        </form-login-config>
     </login-config>

Navigation links that does no work in Header.xhtml



    <h:form>
        <ul>
            <li><a class = "#{view.viewId eq '/resources/views/Tasks.xhtml' ? 'active' : ''}" href="Tasks.xhtml">Zadania</a></li>
            <li><a class = "#{view.viewId eq '/resources/views/Network.xhtml' ? 'active' : ''}" href="Network.xhtml">Sieć</a></li>
            <li><a class = "#{view.viewId eq '/resources/views/Team.xhtml' ? 'active' : ''}" href="Team.xhtml">Zespół</a></li>
            <li><a class = "#{view.viewId eq '/resources/Login.xhtml' ? 'active' : ''}" outcome="resources/views/Login.xhtml" jsf:action="#{loginBean.logout()}">Logout</a></li>
        </ul>
    </h:form>

Kukeltje
  • 12,223
  • 4
  • 24
  • 47
  • Start here: https://stackoverflow.com/questions/15521451/how-to-navigate-in-jsf-how-to-make-url-reflect-current-page-and-not-previous-o – Kukeltje Aug 11 '19 at 14:02
  • Thanks. I thought there is some problem with login functionality but the real problem was that I added h:commandbutton which works differently then previous h:button. So in my case solution was to add "faces-redirect=true" in Login method but also this let me think that maybe I have too many navigation cases in my project. – Urszula Szczęśniak Aug 11 '19 at 21:13

0 Answers0