Session JSF2.0登录出现问题+;会话范围处理

Session JSF2.0登录出现问题+;会话范围处理,session,logging,jsf-2,Session,Logging,Jsf 2,我在JSF2.0中处理登录时遇到问题。我真的不知道我走的方向是否正确。我想具体点,所以我会指出我的应用程序是如何工作的 具有会话作用域的登录页 豆子 正确登录后,用户 被重定向到具有的下一页 另一个会话作用域bean 第二个bean获得登录名和 来自firsbean的密码字符串 供数据库进一步使用 我的问题是我是否为用户创建了两个会话?如果是这样,我如何才能终止第一个会话。如果这不是管理登录的最佳方式,请纠正我。先谢谢你 这是一个简单的例子 登录BEAN package main; impo

我在JSF2.0中处理登录时遇到问题。我真的不知道我走的方向是否正确。我想具体点,所以我会指出我的应用程序是如何工作的

  • 具有会话作用域的登录页 豆子
  • 正确登录后,用户 被重定向到具有的下一页 另一个会话作用域bean
  • 第二个bean获得登录名和 来自firsbean的密码字符串 供数据库进一步使用
  • 我的问题是我是否为用户创建了两个会话?如果是这样,我如何才能终止第一个会话。如果这不是管理登录的最佳方式,请纠正我。先谢谢你

    这是一个简单的例子

    登录BEAN

    package main;
    
    import java.io.Serializable;
    import java.sql.SQLException;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    
    @SessionScoped
    
    @ManagedBean(name="loginBean")
    
    public class loginBean implements Serializable
    {
        private String login;
        private String password;
    
        public loginBean()
        {
    
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
    
    
        public String getLogin() {
            return login;
        }
    
        public void setLogin(String login) {
            this.login = login;
        }
    
        public String login() throws ClassNotFoundException, SQLException
        {
            SQL sql = new SQL(); //class connecting do database
            if( sql.login(this.login, this.password) == true )
            {
                return "yes"; 
            }
            else
            {
                return "no";
            }
        }
    
    }
    
    登录页面LOGIN.xhtml

    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html">
        <h:head>
    
        </h:head>
        <h:body>
            <h:form>
                <div id="logowanie" style="margin: auto; max-width: 180px; margin-top: 50px; ">
                <table border="0" cellspacing="4" cellpadding="4">
                    <thead></thead>
                    <tbody>
                        <tr>
                            <td><h:outputText value="login:" /></td>
                            <td><h:inputText value="#{loginBean.login}" size="10"/></td>
                        </tr>
                        <tr>
                            <td><h:outputText value="password:" /> </td>
                            <td><h:inputSecret value="#{login.password}" size="10"/></td>
                        </tr>
                        <tr>
                            <td colspan="2"><h:commandButton value="zaloguj" action="#{loginBean.login}" /></td>
                        </tr>
                    </tbody>
    
                </table>
    
                </div>
            </h:form>
        </h:body>
    </html>
    
    面配置

    <?xml version='1.0' encoding='UTF-8'?>
    
    <!-- =========== FULL CONFIGURATION FILE ================================== -->
    
    <faces-config version="2.0"
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
        <navigation-rule>
            <from-view-id>/login.xhtml</from-view-id>
            <navigation-case>
                <from-outcome>yes</from-outcome>
                <to-view-id>/panel.xhtml</to-view-id>
            </navigation-case>
            <navigation-case>
                <from-outcome>no</from-outcome>
                <to-view-id>/login.xhtml</to-view-id>
            </navigation-case>
        </navigation-rule>
    </faces-config>
    
    
    /login.xhtml
    对
    /panel.xhtml
    不
    /login.xhtml
    
    这不会创建两个会话,而是在同一会话中创建两个会话范围的bean


    但是,如果将管理登录视图的bean设置为会话范围,则可能会更好,因为实际上没有理由将其设置为会话范围(始终建议保持会话状态较小)。然后,
    loginBean
    将简单地设置
    panelBean的状态

    谢谢。Im使用CGI,因此我选择了请求范围,因为viev范围不受支持
    <?xml version='1.0' encoding='UTF-8'?>
    
    <!-- =========== FULL CONFIGURATION FILE ================================== -->
    
    <faces-config version="2.0"
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
        <navigation-rule>
            <from-view-id>/login.xhtml</from-view-id>
            <navigation-case>
                <from-outcome>yes</from-outcome>
                <to-view-id>/panel.xhtml</to-view-id>
            </navigation-case>
            <navigation-case>
                <from-outcome>no</from-outcome>
                <to-view-id>/login.xhtml</to-view-id>
            </navigation-case>
        </navigation-rule>
    </faces-config>