如何禁用编程登录身份验证 Netbeans/Glassfish



我正在尝试在Windows上本地运行Netbeans/Glassfish应用程序,该应用程序目前正在Unix服务器上运行。我已经成功地启动并运行了应用程序,但由于授权异常而无法通过登录显示。我在应用程序的数据库中设置了我的姓名(电子邮件)和密码,并且能够使用我的凭据登录到在Unix服务器上运行的应用程序。我已经通过腻子隧道将 Glassfish 服务器连接到数据库,并通过 Glassfish 管理控制台成功 ping 它。 我还修改了 sun-resources.xml 以使用隧道端口进行数据库访问。

程序执行身份验证的方式是使用以下代码:

     boolean authenticateSucceeded=false;
        try {
            ProgrammaticLogin pl=new ProgrammaticLogin();
            authenticateSucceeded=pl.login(user, getEncryptedPassword(password), "mycompany-security-realm", request, response, true);
            String LOGIN_MSG="Login ok for user: "+user;
            logger.info(LOGIN_MSG);
}
        catch (javax.security.auth.login.LoginException e) {
            logger.info("Login exception, user: "+user+", message ="+e.getMessage());
            e.printStackTrace();
        }
        catch (Exception e) {
            logger.info("Login exception, user: "+user+", message ="+e.getMessage());
            e.printStackTrace();
        }
        String forward=null;
        if (authenticateSucceeded)
        {
            forward=URL_HOME_PAGE;
        }
        else{
            forward=LOGIN_ERROR_PAGE;
            String loginComment="Login failed: user ="+user+", fwd ="+forward;
            logger.info(loginComment);
        }
        forward(request,response,forward);

下面是部分堆栈转储:

SEVERE: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: javax.security.auth.login.LoginException: Failed file login for myname@mycompnay.com.
        at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:353)
        at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:199)
        at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:152)
        at com.sun.web.security.WebProgrammaticLoginImpl.login(WebProgrammaticLoginImpl.java:122)
        at com.sun.appserv.security.ProgrammaticLogin$2.run(ProgrammaticLogin.java:259)
        at java.security.AccessController.doPrivileged(Native Method)

以下是为登录安全性配置的 Web.xml:

 <security-constraint>
    <web-resource-collection>
            <web-resource-name>MySecureResource</web-resource-name>
            <url-pattern>/stage/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
                <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>mycompany-security-realm</realm-name>
        <form-login-config>
            <form-login-page>/login/login.jsp</form-login-page>
            <form-error-page>/login/forgotPassword.jsp</form-error-page>
        </form-login-config>
    </login-config>
"

mycompany-security-realm"包含在一个名为"domain.xml的生成文件中

  <auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="mycompany-security-realm">
      <property name="jaas-context" value="jdbcRealm"/>
      <property name="password-column" value="password"/>
      <property name="group-table" value="grouptable"/>
      <property name="datasource-jndi" value="jdbc/mycompany-sec"/>
      <property name="user-table" value="usertable"/>
      <property name="group-name-column" value="groupid"/>
      <property name="jass-context" value="jdbcRealm"/>
      <property name="db-password" value="xxxx"/>
      <property name="digest-algorithm" value="none"/>
      <property name="db-user" value="mycompanydbuser"/>
      <property name="user-name-column" value="userid"/>
    </auth-realm>

当我查看 domain.xml 中指定的 jdbc 时,它与生产版本不同,后者在服务器上设置为指向不同的数据库。但是,当我将其设置为指向同一数据库时,我得到相同的异常。

这是一个遗留应用程序,在最坏的情况下,我可以将其加载到测试服务器并在那里进行测试。但是,为了形式起见,我想在本地运行它。我怎样才能让这个东西工作?还是禁用身份验证更好,如果是,如何禁用?我确实尝试在 web.xml 中注释掉身份验证领域,但也没有运气。

消息

LoginException: Failed file login for myname@mycompnay.com

指示("文件登录失败")您的应用程序未使用要使用的 JDBC 域,而是使用缺省文件域。

造成这种情况的常见原因是 JDBC 领域实际上没有在 Glassfish 中配置,或者它在错误的配置中配置。domain.xml中有一个default-config部分和一个server-config部分。确保在 server-config 中配置 JDBC 领域。

要禁用身份验证,只需注释掉security-constraintlogin-config即可。

最新更新