IllegalStateException podczas próby wywołania funkcji

0

Witam,
Napisałem następującą funkcję do sprawdzania uprawnień użytkownika, problem w tym, że kiedy próbuję wywołać tę funkcję wyrzuca mi IllegalStateException w linii z context.addMessage(null, new FacesMessage(e.getMessage())); kiedy ją zakomentuje aplikacja nie wyświetla niczego. Czym to jest spowodowane?


    public void sprawdz(int tk, int uprawnienia) {
                 //String testowy = sesja.getAttribute("typ_konta").toString();
                // int a =  sesstest();
                //HttpSession sesja_z = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
               // int typ_konta = Integer.parseInt(sesja.getAttribute("typ_konta").toString());
               
               try{ 
               
                   if(KlasyPomocnicze.weryfikuj(tk,uprawnienia)){
                    context.addMessage(null, new FacesMessage("Masz dostęp!"));
                    
                }else{
                    context.addMessage(null, new FacesMessage("Nie masz dostępu"));
                    
                }}catch(Exception e){
                    //context.addMessage(null, new FacesMessage(e.getMessage()));
                }
                
        
    }

0

Ja bym zaczął od wypisania wiadomości z tego wyjątku. Zwykle jest tam informacja o przyczynie...

0

jak by mi sie blad wypisal to bym wkleil ale zamias wypisac blad to sie wywala strona i wyskakuje to:

java.lang.IllegalStateException
	at com.sun.faces.context.FacesContextImpl.assertNotReleased(FacesContextImpl.java:705)
	at com.sun.faces.context.FacesContextImpl.addMessage(FacesContextImpl.java:504)
	at moduly.Logowanie.sprawdz(Logowanie.java:91)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:165)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:84)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:159)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
	at com.sun.faces.facelets.el.ELText$ELTextVariable.writeText(ELText.java:238)
	at com.sun.faces.facelets.el.ELText$ELTextComposite.writeText(ELText.java:154)
	at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:85)
	at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
	at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
0

No dobra, pokazałeś tak mało kodu ze trzeb zgadywać. Skad masz context? Bo rozumiesz ze context jest RequestScope i jeśli go sobie zapiszesz gdzieś w jakimś beanie SessionScope/Singleton czy coś, to to nie będzie działać?

0

Tu jest cały kod Logowanie.java - kod odpowiedzialny za logowanie i KlasyPomocnicze
zawierające różne klasy pomocnicze (w tym weryfikację)

package moduly;

import data.Uzytkownicy;
import java.io.IOException;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.apache.catalina.manager.util.SessionUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;



@ManagedBean
@SessionScoped
public class Logowanie {

    /**
     * Creates a new instance of Logowanie
     */
    private String login;
    private String haslo;
    FacesContext context = FacesContext.getCurrentInstance();
    HttpSession sesja;
    
    
    @PostConstruct
    public void initialiseSession() {
        sesja = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        
        //context.addMessage(null, new FacesMessage("DUPA"));
//         HttpSession session = SessionUtils.getSession();
//            session.setAttribute("username", user);
    }
    
    
    public String getLogin() {
        return this.login;
    }
    
    public void setLogin(String login) {
        this.login = login;
    }

    public String getHaslo() {
        return this.haslo;
    }
    
    public void setHaslo(String haslo) {
        this.haslo = haslo;
    }    
    
    public Logowanie() {
    }
    public int sesstest(){
        String testowy = sesja.getAttribute("typ_konta").toString();
        int a =  Integer.parseInt(testowy)+1;
        
        return a;
    }
    public void sprawdz( int uprawnienia) {
                 //String testowy = sesja.getAttribute("typ_konta").toString();
                // int a =  sesstest();
                //HttpSession sesja_z = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
                int typ_konta = Integer.parseInt(sesja.getAttribute("typ_konta").toString());
               
               try{ 
               
                   if(KlasyPomocnicze.weryfikuj(typ_konta,uprawnienia)){
                    context.addMessage(null, new FacesMessage("Masz dostęp!"));
                    
                }else{
                    context.addMessage(null, new FacesMessage("Nie masz dostępu"));
                    
                }}catch(Exception e){
                   // context.addMessage(null, new FacesMessage(e.getLocalizedMessage()));
                   System.out.println(e.getMessage());
                }
                
        
    }
    
    
    public void Zaloguj() throws IOException{
        FacesContext context = FacesContext.getCurrentInstance();
        SessionFactory factory = new Configuration().configure().buildSessionFactory();
        Session session = factory.openSession();
        Criteria cr = session.createCriteria(Uzytkownicy.class);
        cr.add(Restrictions.eq("login",login));
        List res = cr.list();
        if(res.isEmpty()){
            context.addMessage(null, new FacesMessage("Podany adres e-mail nie istnieje w naszej bazie") );
        }else{
            Uzytkownicy k = (Uzytkownicy) res.get(0);
            Rejestracja rej = new Rejestracja();            
            if(k.getHaslo().equals(rej.PasswordHash(haslo))){
                context.addMessage(null, new FacesMessage("Dobre hasło - zalogowano") );
                sesja.setAttribute("zalogowano","tak");
                sesja.setAttribute("user_id",k.getIdUzytkownika());
                sesja.setAttribute("nazwa",k.getImie() + " " + k.getNazwisko());
                sesja.setAttribute("typ_konta",k.getTypKonta());
                 FacesContext.getCurrentInstance().getExternalContext().redirect("/TaniKomp/");
                
            }else{
                context.addMessage(null, new FacesMessage("Błędne hasło")); 
               
            }            
        }
    
    }
    public void wyloguj() throws IOException{
            FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
            FacesContext.getCurrentInstance().getExternalContext().redirect("/TaniKomp/b");
        }
    
}

public class KlasyPomocnicze {
    
    public static boolean weryfikuj(int typKonta, int wymUpr){
        int wer;
        wer = (typKonta >> wymUpr)%2;
     boolean upr;
        if(wer==1){
            upr = true;
        }  else upr = false;
          return upr;
    }
    
}
1

Wywal pole
FacesContext context = FacesContext.getCurrentInstance();
i wstaw to na poczatek metody sprawdz (jak zmienna).
Tak samo jak w Zaloguj

0

Przecież napisałem wyżej w czym problem o_O
@SessionScoped
FacesContext context = FacesContext.getCurrentInstance();
a potem
context.addMessage(null, new FacesMessage("Masz dostęp!"));
Tak sie nie da bo context ma scope Request a nie Session. Ty sobie w sesji zapisałeś context z 1 requestu a on już w 2 requeście nie zadziała.

0
Shalom napisał(a):

Przecież napisałem wyżej w czym problem o_O
@SessionScoped
FacesContext context = FacesContext.getCurrentInstance();
a potem
context.addMessage(null, new FacesMessage("Masz dostęp!"));
Tak sie nie da bo context ma scope Request a nie Session. Ty sobie w sesji zapisałeś context z 1 requestu a on już w 2 requeście nie zadziała.

Dzięki za pomoc :)
Sprawdzę w domu

1 użytkowników online, w tym zalogowanych: 0, gości: 1