Witam! Mam w projekcie kod jak poniżej. Kiedy uruchomię projekt i wpiszę login oraz hasło dostaję komunikat Musisz podać nazwę gracza, Musisz podać hasło - tak jakbym nic nie wpisała. Niestety nie potrafię się doszukać błędu.
Oprócz Gracz.java i LoginBB.java mam jeszcze SecurityCheckFilter.java - chciałabym aby admin po zalogowaniu był przekierowany do innej strony niż user i z tym też nie umiem dojść do ładu. Proszę o pomoc

Gracz.java


package com.jsf.entities;

import java.io.Serializable;

import javax.persistence.*;

import java.util.Date;
import java.util.HashSet;
import java.util.List;

/**

  • The persistent class for the gracz database table.
  • */
    @Entity
    @Table(name="gracz", schema = "zagadkibazadb")
    //@NamedQuery(name="Gracz.findAll", query="SELECT g FROM gracz g")
    public class Gracz implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(unique=true, nullable=false, name="idgracz")
    private Integer idgracz;

    @Column(name="nazwa", nullable = false)
    private String nazwa;

    @Column(name="haslo", nullable = false)
    private String haslo;

    @Column(name="ostatni_wynik")
    private Integer ostatniWynik;

    @Temporal(TemporalType.DATE)
    @Column(name="ostatnio_grano")
    private Date ostatnioGrano;

    /@Column(name = "wynik_idwynik", nullable = false)
    private String wynik_idwynik;
    /
    private HashSet<string> roles = new HashSet<string>();

    public Gracz(String nazwa, String haslo) {
    this.nazwa = nazwa;
    this.haslo = haslo;

    }

    //bi-directional many-to-one association to Wynik
    //@ManyToOne
    @OneToMany(mappedBy="gracz", fetch=FetchType.EAGER)
    private List<wynik> wyniks;
    //private Wynik wynik;

    public Gracz() {
    }

    public Integer getIdgracz() {
    return this.idgracz;
    }

    public void setIdgracz(Integer idgracz) {
    this.idgracz = idgracz;
    }
    public String getNazwa() {
    return this.nazwa;
    }

    public void setNazwa(String nazwa) {
    this.nazwa = nazwa;
    }

    public String getHaslo() {
    return this.haslo;
    }

    public void setHaslo(String haslo) {
    this.haslo = haslo;
    }

    public Integer getOstatniWynik() {
    return this.ostatniWynik;
    }

    public void setOstatniWynik(Integer ostatniWynik) {
    this.ostatniWynik = ostatniWynik;
    }

    public Date getOstatnioGrano() {
    return this.ostatnioGrano;
    }

    public void setOstatnioGrano(Date ostatnioGrano) {
    this.ostatnioGrano = ostatnioGrano;
    }

    public List<wynik> getWyniks() {
    return this.wyniks;
    }

    public void setWyniks(List<wynik> wyniks) {
    this.wyniks = wyniks;
    }
    /* public Wynik getWynik() {
    return this.wynik;
    }

    public void setWynik(Wynik wynik) {
    this.wynik = wynik;
    }*/

    public HashSet<string> getRoles() {
    return roles;
    }

    public void setRoles(HashSet<string> roles) {
    this.roles = roles;
    }

}


> LoginBB.java 
```java
package com.jsfcourse.security;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
//import java.util.Date;

import com.jsf.dao.GraczDAO;
import com.jsf.entities.Gracz;

@ManagedBean
public class LoginBB {
    private static final String PAGE_MAIN = "index.jsf";
    private static final String PAGE_LOGIN = "gracz.jsf?faces-redirect=true";
    ///private static final String PAGE_ADMIN = "admin";
    private static final String PAGE_STAY_AT_THE_SAME = null;

    @EJB
    GraczDAO graczDAO;

    private String nazwa;
    private String haslo;

    public String getNazwa() {
        return nazwa;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public String getHaslo() {
        return haslo;
    }

    public void setHaslo(String haslo) {
        this.haslo = haslo;
    }

    public boolean validateData() {
        boolean result = true;
        FacesContext ctx = FacesContext.getCurrentInstance();

        // check if not empty
        if (nazwa == null || nazwa.length() == 0) {
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Musisz podać nazwę gracza", "null"));
        }

        if (haslo == null || haslo.length() == 0) {
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Musisz podać hasło ", "null"));
        }

        if (ctx.getMessageList().isEmpty()) {
            result = true;
        } else {
            result = false;
        }
        return result;

    }

    public String doLogin() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        Gracz gracz = null;

        // 1. check parameters and stay if errors
        if (!validateData()) {
            return PAGE_STAY_AT_THE_SAME;
        }

        // 2. verify login and password - get User from "database"
        gracz = getUserFromDatabase(nazwa, haslo);

        // 3. if bad login or password - stay with error info
        if (gracz == null) {
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Niepoprawny login lub hasło", null));
            return PAGE_STAY_AT_THE_SAME;
        }
        /*if(nazwa == "Admin"){
            HttpSession session = (HttpSession) ctx.getExternalContext()
                    .getSession(true);
            session.setAttribute("Admin", gracz);

            // and enter the system
            return PAGE_ADMIN;

        }*/

        // 4. if login ok - save User object in session
        HttpSession session = (HttpSession) ctx.getExternalContext()
                .getSession(true);
        session.setAttribute("Gracz", gracz);

        // and enter the system
        return PAGE_LOGIN;
    }

    public Gracz getGracz() {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
                .getExternalContext().getSession(true);
        return (Gracz) session.getAttribute("Gracz");
    }

    public String doLogout(){
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
                .getExternalContext().getSession(true);
        //Invalidate session
        // - all objects within session will be destroyed
        // - new session will be created (with new ID)
        session.invalidate();
        return PAGE_MAIN;
    }

    // simulate finding user in database
    private Gracz getUserFromDatabase(String nazwa, String haslo) {
        Gracz g = null;

        if (nazwa.equals("nazwa") && haslo.equals("haslo")) {
            g = new Gracz(nazwa, haslo);
            g.setNazwa("nazwa");
        //  g.setOstatniWynik("#{gracz.ostatniWynik}");
            g.setHaslo("haslo");

            // assumed system roles
        /*  g.getRoles().add("role1");
            g.getRoles().add("role2");
            g.getRoles().add("admin");*/
        }

        return g;
    }

}

SecurityCheckFilter.java


public class SecurityCheckFilter implements Filter {
private ServletContext servletContext;
String publicRes;
String loginPage;
String resRes;
private static final String FACES_REDIRECT_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
        + "<partial-response><redirect url=\"%s\"></redirect></partial-response>";

/**
 * Initialization of the filter object (overrides the parent method). The
 * method loads parameters specifying paths of public resources and login
 * page. Parameters should be set for the filter in web.xml as
 * "publicResource" and "loginPage". If the parameters are not set "/public"
 * and "/ligin.jsf" are assumed as the relevant values.
 * 
 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
 */
@Override
public void init(FilterConfig config) throws ServletException {
    servletContext = config.getServletContext();
    // get defined public resources, if not - assume "/public" subfolder
    // (default)
    publicRes = config.getInitParameter("publicResource");
    if (publicRes == null) {
        publicRes = "/public";
    }
    publicRes = config.getInitParameter("restrictedResource");
    if (resRes == null) {
        resRes = "/restricted";
    }

   loginPage = config.getInitParameter("loginPage");
    if (loginPage == null) {
        loginPage = "/login.jsf";
    }

}

/**
 * The filtering method (overrides the parent method). The method retrieves
 * a User object from session. If the conditions of valid connection are
 * fulfilled then the request is passed further. In other case the user is
 * forwarded to a login page. The approach works also for JSF AJAX requests.
 * 
 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
 */
@Override
public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    // load user object from session
    HttpSession session = request.getSession();
    Gracz g = (Gracz) session.getAttribute("gracz");

    boolean haslo = false;

    if (g == null) { // no data - check if call for public resources or
                        // login page
        String path = request.getServletPath();
        if (path.startsWith(publicRes) || path.startsWith(loginPage)) {
            haslo = true;
        }
    } else {
        haslo = true;
    }

    // IMPORTANT: other checking based on remote host or port could be
    // performed above for higher level of security

    // if the request is not valid (client is not logged in)
    if (!haslo) {
        // if AJAX request then redirect to application root
        if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {
            res.setContentType("text/xml");
            res.setCharacterEncoding("UTF-8");
            res.getWriter().printf(FACES_REDIRECT_XML,
                    request.getContextPath() + "/");
        } else {
            // if other (regular) request then forward to the defined login
            // page
            servletContext.getRequestDispatcher(loginPage).forward(request,
                    response);
        }

    } else { // if request is valid (client is logged in) then
        chain.doFilter(request, response);
    }

}

@Override
public void destroy() {
}

}


index.xhtml
```html
<h:panelGrid columns="6" cellpadding="0" style="margin-left: 4em;">
                    <!-- <div id="content2">-->
                    <h:outputLabel for="nazwa" value="&nbsp;&nbsp;&nbsp;Login:&nbsp;" styleClass="logowanie_napisl"/>
                <h:inputText id="nazwa" value="#{loginBB.nazwa}" styleClass="logowanie_login" />
                <h:outputLabel for="haslo" value="&nbsp;&nbsp;&nbsp;Hasło:&nbsp;" styleClass="logowanie_napish"/>
                <h:inputSecret id="haslo" value="#{loginBB.haslo}" styleClass="logowanie_haslo" />
                <h:messages id="msg" />
    <h:form>
     <h:commandButton value="Zaloguj" action="#{loginBB.doLogin()}" styleClass="button1" update="msg"/>
    </h:form>