Ошибка ManagedBeanCreationException при настройке для теста JSF/j_security_check

Я надеюсь, что кто-то может дать мне подсказку о том, что здесь происходит, за этим исключением. Я создаю среду, в которой я могу протестировать j_security_check с помощью JSF, и что я замечаю, так это когда я повторно развертываю свое приложение, не перезапуская glassfish, я вижу эту ошибку. Я думал, что было бы совершенно безопасно просто перераспределить войну, но моя установка не использовалась до тех пор, пока стеклянная рыба не будет перезапущена и война не будет переброшена. Я беспокоюсь, что это станет проблемой позже в будущем. Любой совет?

Я использую Glassfish 3.1.2, NetBeans 7.1.2...

com.sun.faces.mgbean.ManagedBeanCreationException: Произошла ошибка при выполнении внедрения ресурса в управляемый компонент userController в com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:229) в com.sun.faces.mgbean.BeanBuilder. сборка (BeanBuilder.java:105) в com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) в com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) в com.sun.faces.el.:176) на com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) на com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:103) на com.sun.el.parser.AstValue.getValue(AstValue.java:179) в com.sun.el.parser.AstDeferredExpression.getValue(AstDeferredExpression.java:63) в com.sun.el.parser.AstCompositeExpression.getValue(AstCompositeExpression.java:68) по адресу com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224) по адресу org.jboss.weld.el.WeldValueExpression.getValue.welueExpression..faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) по адресу javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) по адресу javax.faces.component.ComponentStateHeljSer (18).) в javax.faces.component.UIOutput.getValue(UIOutput.java:169) в com.sun.faces.renderkit.html_basic.OutputLinkRenderer.getValue(OutputLinkRenderer.java:182) в com.sun.faces.renderkit.ht_ HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) по адресу com.sun.faces.renderkit.html_basic.OutputLinkRenderer.renderAsActive(OutputLinkRenderer.java:191) по адресу com.sun.faces.Rende_Rede_Rede_Reg_Exid_ExID 107) на javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820) на javax.faces.component.UIComponent.encodeAll(UIComponent.java:1755) в javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) в javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) в com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) в com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) в javax.faces.application.ViewHandlerWrapper.der (ViewHandlerWrapper.java:288) в com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) в com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) в com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) в javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) в org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:15) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) в org.apache.catalina.core.StandardContextValve.invoke(StandardContex) tValve.java:175) в org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) в org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) в org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) в org.apache.catalina.connector.CoyoteAdapter.serapj (coy).) в com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) в com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) в com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) в com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) в com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) в com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) в com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) в com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) в com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) в com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) по адресу com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) по адресу com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.javaConun). Com) 59). выполнить (ContextTask.java:71) в com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) в com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:662) Причина: com.sun.faces.spi.InjectionProviderException: com.sun.enterprise.container.common.spi.util.InjectionException: исключение при попытке вызвать метод жизненного цикла private void avenger.UserController.startup() в org.glassfish.faces.integration.GlassFishInjectionProvider.invokePostConstruct(GlassFishInjectionProvider.java:231)
    at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:223)
    ... еще 56 причин: com.sun.enterprise.container.common.spi.util.InjectionException: исключение при попытке вызвать метод жизненного цикла закрытое void glassfish.faces.integration.GlassFishInjectionProvider.invokePostConstruct(GlassFishInjectionProvider.java:229)
    ... еще 57 Вызвано: java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException в java.security.Accessative)). org.glassfish.faces.integration.GlassFishInjectionProvider.invokeLifecycleMethod(GlassFishInjectionProvider.java:376)
    ... еще 59 Вызвано: java.lang.reflect.InvocationTargetException на sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor.hoke.hoke.j.ref.j.ref.j.ref).java:597)
    at org.glassfish.faces.integration.GlassFishInjectionProvider$2.run(GlassFishInjectionProvider.java:382)
    ... еще 61 причина: java.lang.ClassCastException: avenger.MyUser не может быть приведен к мстителю..UserController.updateUserList(UserController.java:103) в avenger.UserController.startup(UserController.java:39) 

Вот части моего web.xml

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<security-constraint>
    <display-name>Admin</display-name>
    <web-resource-collection>
        <web-resource-name>Admin Views</web-resource-name>
        <description/>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
</security-constraint>
<security-role>
    <description/>
    <role-name>ADMIN</role-name>
</security-role>
<security-role>
    <description/>
    <role-name>USER</role-name>
</security-role>

мой бин управления

@ManagedBean(eager = true)
@SessionScoped
Открытый класс UserController реализует Serializable {

    / **
     * Создает новый экземпляр UserBean
     * /
    public UserController () {}

    @PostConstruct
    private void startup () {
        System.out.println("inilitiazing UserController");
        updateUserList ();
    }

    @PreDestroy
    закрытое закрытие () {
        System.out.println("уничтожение UserController");
        Utils.stopEntityManager();
    }

    приватный статический финал long serialVersionUID = 1L;


    @Override
    public int hashCode () {
        int hash = 5;
        hash = 67 * hash + (this.userList!= null? this.userList.hashCode (): 0);
        hash = 67 * hash + (this.cUser!= null? this.cUser.hashCode (): 0);
        вернуть хеш;
    }

    @Override
    public boolean equals (Object obj) {
        if (obj == null) {
            вернуть ложь;
        }
        if (getClass()!= obj.getClass()) {
            вернуть ложь;
        }
        конечный UserController other = (UserController) obj;
        if (this.userList!= other.userList && (this.userList == null ||!this.userList.equals(other.userList))) {
            вернуть ложь;
        }
        if (this.cUser!= other.cUser && (this.cUser == null ||!this.cUser.equals(other.cUser))) {
            вернуть ложь;
        }
        вернуть истину;
    }


    // текущий пользователь
    MyUser cUser = new MyUser ();
    public MyUser getMyUser () {return cUser; }
    public void setMyUser (MyUser cUser) {this.cUser = cUser;}

    // новый пользователь
    MyUser nUser = new MyUser ();
    public MyUser getNewUser () {return nUser; }
    public void setNewUser (MyUser nUser) {this.nUser = nUser;}

    // список текущих пользователей
    List userList = new LinkedList ();
    public void setUserList (List uList) {userList = uList;}
    public List getUserList () {return userList;}


    public String updateUserList () {

        System.out.println ("updateUserList ()");
        EntityManager em = Utils.getEntityManager ();

        // Запрос q = em.createNamedQuery("MyUser.findAll");
        Query q = em.createQuery("Выбрать u из MyUser u", MyUser.class);
        userList = q.getResultList ();

        for (MyUser cu: userList) {
            String groupList = "";
            for (Grouptable gt: cu.getGrouptableList ()) {
                groupList + = ":" + gt.getGrouptablePK (). getGroupid ();
            }
            cu.setGrouplist (список группы);
        }
        return "users.xhtml";
    }

    public boolean usernameExist () {
        вернуть ложь;
    }

    public String resetNewUser () {
        nUser = новый MyUser ();
        return "createuser.xhtml";
    }

    public String createNewUser () {

        System.out.println ("попытка создать учетную запись с \ n"
                + "\ tusername: " + nUser.getUsername() +"\ n"
                + "\ tpassword:" + nUser.getPassword () + "\ n"
                + "\ tfirst name:" + nUser.getFirstName () + "\ n"
                + "\ tlast name:" + nUser.getLastName () + "\ n");

        // TODO: проверить, если newUser уже существует, если это так, отправить сообщение пользователю


        // установить хешированный пароль
        MessageDigest md = null;
        байт [] дайджест;
        try { md = MessageDigest.getInstance("MD5"); } 
        catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(UserController.class.getName()). Log(Level.SEVERE, null, ex);
        }
        System.out.println("Nuser"+ Nuser);
        //System.out.println("cUser.password"+cUser.getPassword());
        digest = md.digest(nUser.getPassword().getBytes());
        nUser.setPassword(Utils.toHex(переваривать));

        System.out.println ("создание пользователя:" + nUser.getUsername () +
                           "пароль: "+nUser.getPassword());
        EntityManager em = Utils.getEntityManager();
        em.getTransaction() начинается ().
        em.persist (Nuser);
        em.getTransaction () фиксации ().
        updateUserList ();

        return "users.xhtml";
    }

    public String deleteUser () {
        System.out.println("удаление пользователя:" + cUser.getUsername ());
        EntityManager em = Utils.getEntityManager ();
        cUser = em.find (MyUser.class, cUser.getUsername ());

        em.getTransaction () начинается ().
        em.remove (cUser);
        em.getTransaction () фиксации ().
        //em.close ();
        return "users.xhtml";
    }

    public String deleteSelectedUsers () {
        for (MyUser cu: userList) {
            if (cu.getSelected ()) {
                System.out.println ("Планируем удалить: "+cu);
            }
        }
        EntityManager em = Utils.getEntityManager();
        for (MyUser cu: userList) {
            if (cu.getUsername().equalsIgnoreCase("ADMIN") && cu.getSelected()) {
                System.out.println("учетная запись администратора не может быть удалена");
                Продолжить;
            }           
            if (cu.getSelected()) {
                MyUser targetUser = em.find(MyUser.class, cu.getUsername());
                System.out.println("удаление пользователя: "+cu.toString());
                em.getTransaction() начинается ().
                em.remove (targetUser);
                em.getTransaction () фиксации ().
            }
        }
        updateUserList ();
        return "users.xhtml";
    }

    public String login () {
        System.out.println("пользователь пытается войти в систему...");
        System.out.println("username: "+cUser.getUsername());
        System.out.println("пароль:" + cUser.getPassword ());

        // установить хешированный пароль
        MessageDigest md = null;
        байт [] дайджест;
        try { md = MessageDigest.getInstance("MD5"); } 
        catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(UserController.class.getName()). Log(Level.SEVERE, null, ex);
        }
        digest = md.digest(cUser.getPassword().getBytes());
        cUser.setPassword(Utils.toHex(переваривать));

        MyUser userFound = Utils.getEntityManager (). Find(MyUser.class, cUser.getUsername());
        if (userFound == null) {
            System.err.println("пользователь не существует");
            вернуть ноль;
        }

        if (! userFound.getPassword (). equalsIgnoreCase (cUser.getPassword ())) {
            System.err.println ("Неверный пароль");
            вернуть ноль;
        }

        return "users.xhtml";

// FacesContext context = FacesContext.getCurrentInstance ();
// HttpServletRequest request = (HttpServletRequest) context.getExternalContext ();
// пытаться {
//            request.login(this.cUser.getFirstName(), this.cUser.getPassword());
//            this.cUser = Utils.getEntityManager().find(MyUser.class,this.cUser.getUsername());
//        } catch (ServletException e) {
//            context.addMessage(null, new FacesMessage("Неизвестный логин"));
//}

    }

    public MyUser getUser () {
        if (cUser == null) {
            Принципал = FacesContext.getCurrentInstance(). GetExternalContext(). GetUserPrincipal();
            если (главный!= ноль) {
                //cUser = userDAO.find(Principal.getName()); // Найти пользователя по j_username
                cUser = Utils.getEntityManager().find(MyUser.class, Principal.getName());
            }
        }
        возврат CUser;
    }
}

мой init.sql для JavaDB

создать таблицу usertable (
    username varchar(128) NOT NULL CONSTRAINT USER_PK PRIMARY KEY, пароль varchar(128) NOT NULL, имя varchar(128) NOT NULL, фамилия varchar(128) NOT NULL); создать таблицу grouptable (имя пользователя varchar(128) NOT NULL,
    groupid  varchar(128) NOT NULL,
    CONSTRAINT GROUP_PK PRIMARY KEY(имя пользователя, groupid),
    CONSTRAINT USER_FK FOREIGN KEY(имя пользователя) REFERENCES usertable(имя пользователя) НА УДАЛИТЬ CASCADE ON UPDATE RESTR; вставить в usertable (имя пользователя, пароль, имя, фамилию) значения ('admin', '21232f297a57a5a743894a0e4a801fc3','',''); вставить в grouptable(username,groupid) значения ('admin', 'USER'); вставить в grouptable(username,groupid) значения ("admin", "ADMIN"); 

я создал свой пул соединений и jdbcRealm, используя инструкции от: http://blog.gamatam.com/2009/11/jdbc-realm-setup-with-glassfish-v3.html

0 ответов

Другие вопросы по тегам