如何禁用ProgrammaticLogin身份验证Netbeans / Glassfish

时间:2014-11-24 16:48:19

标签: authentication netbeans glassfish

我试图在Windows上本地运行Netbeans / Glassfish应用程序,该应用程序当前正在Unix服务器上运行。我已成功启动并运行应用程序,但由于授权异常,无法通过登录显示。我在应用程序的数据库中设置了我的姓名(电子邮件)和密码,并且能够使用我的凭据登录到Unix服务器上运行的应用程序。我已经通过putty隧道将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>

&#34; mycompany-security-realm&#34;包含在名为&#34; domain.xml&#34;

的生成文件中
  <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中注释auth-realm,但也没有运气。

1 个答案:

答案 0 :(得分:0)

消息

LoginException: Failed file login for myname@mycompnay.com

表示(“文件登录失败”)您的应用程序未使用您想要使用的JDBC域但是默认文件域。

这种情况的常见原因是,在JDBCfish中确实没有配置JDBC领域,或者在错误的配置中配置了JDBC领域。 default-config中有server-config部分和domain.xml部分。确保在server-config

中配置了JDBC领域

要停用身份验证,只需注释掉security-constraintlogin-config