1

我正在尝试使用 Postgres 9.4 对 Payara 进行身份验证。我一直在关注一些教程,但它们不起作用。我创建了一个数据库,填充它,记得对密码进行哈希处理(使用 MD-5),然后是 JDBC 连接池(ping 有效),然后是 jdbc 资源,一个领域,接下来我创建一个 java web 应用程序,我记得 web.xml 。 xml,glassfish-web.xml,关于登录和错误页面......在部署应用程序并尝试登录后,我得到一个错误页面(我在应用程序中创建的那个)。

这正是我所做的:

我创建了一个名为“security”的数据库:

CREATE TABLE "Group" (
    group_id serial  NOT NULL,
    group_name text  NOT NULL,
    user_id int  NULL,
    CONSTRAINT Group_pk PRIMARY KEY (group_id)
);

CREATE TABLE Users (
    user_id serial  NOT NULL,
    username text  NOT NULL,
    password text  NOT NULL,
    CONSTRAINT Users_pk PRIMARY KEY (user_id)
);

ALTER TABLE "Group" ADD CONSTRAINT Group_Users
    FOREIGN KEY (user_id)
    REFERENCES Users (user_id)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

我使用加密网站对我的密码“test”进行加密,得到以下值:098f6bcd4621d373cade4e832627b4f6。我使用该值来填充我的数据库:

我使用 Payara 服务器。我创建了新的 JDBC 连接池,如图所示。我得到信息“Ping Succeeded”,所以我认为这部分没问题。

我创建了一个 JDBC 资源,其 JNDI 名称:jdbc/simplesec,池名称:secuPool。

我创建了一个名为“secuRealm”的新领域——图片如下。我想那里可能有问题? 领域部分 1 领域部分 2 接下来,我编写应用程序部分。(我选择 web 应用程序,java)。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="">
  <security-role-mapping>
    <role-name>admin</role-name>
    <group-name>admin</group-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>guest</role-name>
    <group-name>guest</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>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>secuRealm</realm-name>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/error.jsp</form-error-page>
        </form-login-config>
    </login-config>
</web-app>

登录.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Login</h1>
        <form action="j_security_check" method="POST">
            Username:<input type="text" name="j_username"/><br/>
            Password:<input type="password" name="j_password" /><br />
            <input type="submit" value="Login" />
            <br/>            
        </form>
    </body>
</html>

错误.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Incorrect Credentials</h1>
        Try again. <br/>
        <a href="login.jsp">Login</a>
    </body>
</html>

index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1><br />
        <a href="login.jsp">Login</a>
    </body>
</html>

部署应用程序后,我尝试登录。用户名:1​​,密码:test。我得到一个 error.jsp 页面作为响应。我不明白为什么,使用正确的用户数据,我无法登录。我在哪里犯了错误以及如何使它工作?

4

1 回答 1

0

尝试在领域设置中指定 Digest Algorythm: none

于 2016-09-07T15:11:22.243 回答