Glassfish4 Ошибка входа: исключение безопасности - PullRequest
0 голосов
/ 03 июня 2019

Когда я пытаюсь войти в систему на моем login.jsp, возникает эта ошибка, я настроил все, и я также скопировал версию glassfish с существующей конфигурацией для входа в систему, я только изменил ее, и у меня все еще есть эта ошибка.Я посмотрел на множество вопросов и попробовал пару из них, но это не сработало, и все они довольно устарели.

WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception

Моя jdbcRealm конфигурация:

JAAS Context:                  jdbcRealm
JNDI:                          jdbc/Plinko
User Table:                    users
User Name Column:              username
Password Column:               password
Group Table:                   users_groups
Group Name Column:             groupname
Password Encryption Algorithm: SHA-256
Digest Algorithm:              SHA-256
Encoding:                      Base64
Charset:                       UTF-8

Мой web.xml файл:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>User Rights</web-resource-name>
            <url-pattern>/home.html</url-pattern>
            <url-pattern>/services/general/getBuildings</url-pattern>
            <url-pattern>/services/general/getSensorTypes</url-pattern>
            <url-pattern>/services/general/getSensors</url-pattern>
            <url-pattern>/services/file/getFileLinks</url-pattern>
            <url-pattern>/services/general/getNotes</url-pattern>
            <url-pattern>/services/general/getAllNotifications</url-pattern>
            <url-pattern>/services/general/getCalibrationNotis</url-pattern>
            <url-pattern>/services/general/getChangeNotis</url-pattern>
            <url-pattern>/services/general/checkCacheVersion</url-pattern>
            <url-pattern>/services/general/checkIfSessionValid</url-pattern>
            <url-pattern>/services/auth/checkUser</url-pattern>
            <url-pattern>/services/general/searchBySerial</url-pattern>
        </web-resource-collection>
        <web-resource-collection>
            <web-resource-name>Admin Rights</web-resource-name>
            <url-pattern>/home.html</url-pattern>
            <url-pattern>/services/*</url-pattern>
        </web-resource-collection>
        <web-resource-collection>
            <web-resource-name>Super Rights</web-resource-name>
            <url-pattern>/home.html</url-pattern>
            <url-pattern>/services/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>User</role-name>
        </auth-constraint>
    </security-constraint>
    <security-role>
        <role-name>User</role-name>
    </security-role>
    <security-role>
        <role-name>Admin</role-name>
    </security-role>
    <security-role>
        <role-name>Super</role-name>
    </security-role>
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>jdbcRealm</realm-name>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/loginError.html</form-error-page>
        </form-login-config>
    </login-config>
    <filter>
        <description>Set cache expiry for static content</description>
        <filter-name>ExpiresFilter</filter-name>
        <filter-class>com.zarja.resource.ExpiresFilter</filter-class>
        <init-param>
            <description>Add an Expires Header</description>
            <param-name>days</param-name>
            <param-value>365</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>ExpiresFilter</filter-name>
        <url-pattern>/images/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    <session-config>
        <session-timeout>0</session-timeout>
    </session-config>
</web-app>

Мой glassfish-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
  <context-root>/PlinkoR</context-root>
  <security-role-mapping>
    <role-name>Admin</role-name>
    <group-name>Admin</group-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>User</role-name>
    <group-name>User</group-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>Super</role-name>
    <group-name>Super</group-name>
  </security-role-mapping>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class' java code.</description>
    </property>
  </jsp-config>
</glassfish-web-app>

Мой login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Plinko</title>
        <link rel="icon" href="favicon.ico">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    </head>
    <body>
        <script type="text/javascript">
            $(document).ready(() => {
                $.ajax({
                    type: "GET",
                    url: "services/general/checkCacheVersion",
                    success: (data) => {
                        console.log(data);
                        if (data.split(";")[0] === "OK") {
                            setCookie("cacheVersion", data.split(";")[1] + "", 3650);
                        }
                    },
                    error: (e) => {
                        console.log(e);
                    }
                });
            });
        </script>
        <main class="main">
            <div id="particles-js"></div>
            <script src="js/login/particles.min.js"></script>
            <script src="js/login/particle-app.js"></script>

            <div class="overlay">
                <div class="form-div">
                    <form id="submitForm">
                        <table>
                            <tr class="wrong-credentials"><td colspan="2" id="lang-wrong-credentials">Napačni podatki</td></tr>
                            <tr class="left"><td class="first" colspan="2"></td></tr>
                            <tr><td colspan="2"><input type="text" name="j_username" id="inputUser" placeholder="Uporabniško ime"></td></tr>
                            <tr class="left"><td class="first" colspan="2"></td></tr>
                            <tr><td colspan="2"><input type="password" name="j_password" id="inputPass" placeholder="Geslo"></td></tr>
                            <tr id="submit-tr"><td colspan="2"><input type="submit" class="button-tool" value="Prijava" id="submitLogin"></tr>
                        </table>
                    </form>
                </div>
            </div>
        </main>
    </body>
</html>
<script type="text/javascript">
    var wrongCredentials = false;
    $(document).ready(() => {
        $("#submitForm").submit((e) => {
            var loginOk = false;
            e.preventDefault();
            $.ajax({
                type: "POST",
                url: "j_security_check",
                data: {
                    j_username: $("#inputUser").val(),
                    j_password: $("#inputPassword").val()
                },
                success: function(data) {
                    console.log(data);
                    if (data === undefined || data.indexOf("<title>Plinko Login Error</title>") === -1)
                        loginOk = true;
                    else
                        loginOk = false;
                },
                error: function(e) {
                    console.log(e);
                },
                complete: function() {
                    $.ajax({
                        type: "GET",
                        url: "services/general/login?username=" + $("#inputUser").val() + "&success=" + loginOk,
                        complete: function(e) {
                            console.log(e);
                            if (loginOk) {
                                if (wrongCredentials)
                                    location.href = "index.html";
                                else
                                    location.reload(true);
                            } else {
                                $(".wrong-credentials").show();
                            }
                        }
                    });
                }
            });
        });
    });

    function setCookie(cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
        var expires = "expires=" + d.toGMTString();
        document.cookie = cname + "=" + cvalue + "; " + expires;
    }

    function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) === ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) === 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }
</script>
...