Как войти в AWS из моего веб-приложения с помощью Eclipse JEE? - PullRequest
3 голосов
/ 07 февраля 2020

Я бы хотел, чтобы мое веб-приложение подключилось к AWS. Я использую Eclipse JEE. В поле about указано:

Eclipse IDE для предприятия Java Разработчики.

Версия: 2019-03 (4.11.0)

Идентификатор сборки: 20190314- 1200

У меня есть следующий код:

index. html:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Hello AWS Web World!</title>
<link rel="stylesheet" href="styles/styles.css" type="text/css"
    media="screen">
</head>
<body>

    <h1>Post</h1>
    <div>
        <form action="LoginServlet" method="post">
            Name:<input type="text" name="name"><br>
            Password:<input type="password" name="password"><br>
            <input type="submit" value="submit">
        </form>
    </div>

    <h1>Get</h1>
    <div>
        <form action="LoginServlet" method="get">
            Name:<input type="text" name="name"><br>
            Password:<input type="password" name="password"><br>
            <input type="submit" value="submit">
        </form>
    </div>

</body>
</html>

index. jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ page import="com.amazonaws.*" %>
<%@ page import="com.amazonaws.auth.*" %>
<%@ page import="com.amazonaws.auth.profile.*" %>
<%@ page import="com.amazonaws.services.ec2.*" %>
<%@ page import="com.amazonaws.services.ec2.model.*" %>
<%@ page import="com.amazonaws.services.s3.*" %>
<%@ page import="com.amazonaws.services.s3.model.*" %>
<%@ page import="com.amazonaws.services.dynamodbv2.*" %>
<%@ page import="com.amazonaws.services.dynamodbv2.model.*" %>

<%! // Share the client objects across threads to
    // avoid creating new clients for each web request
    private AmazonEC2         ec2;
    private AmazonS3           s3;
    private AmazonDynamoDB dynamo;
 %>

<%
    /*
     * AWS Elastic Beanstalk checks your application's health by periodically
     * sending an HTTP HEAD request to a resource in your application. By
     * default, this is the root or default resource in your application,
     * but can be configured for each environment.
     *
     * Here, we report success as long as the app server is up, but skip
     * generating the whole page since this is a HEAD request only. You
     * can employ more sophisticated health checks in your application.
     */
    if (request.getMethod().equals("HEAD")) return;
%>

<%
    if (ec2 == null) {
        AWSCredentialsProviderChain credentialsProvider = new AWSCredentialsProviderChain(
            new InstanceProfileCredentialsProvider(),
            new ProfileCredentialsProvider("default"));

        ec2    = new AmazonEC2Client(credentialsProvider);
        s3     = new AmazonS3Client(credentialsProvider);
        dynamo = new AmazonDynamoDBClient(credentialsProvider);
    }
%>

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Hello AWS Web World!</title>
    <link rel="stylesheet" href="styles/styles.css" type="text/css" media="screen">
</head>
<body>
    <div id="content" class="container">
        <div class="section grid grid5 s3">
            <h2>Amazon S3 Buckets:</h2>
            <ul>
            <% for (Bucket bucket : s3.listBuckets()) { %>
               <li> <%= bucket.getName() %> </li>
            <% } %>
            </ul>
        </div>

        <div class="section grid grid5 sdb">
            <h2>Amazon DynamoDB Tables:</h2>
            <ul>
            <% for (String tableName : dynamo.listTables().getTableNames()) { %>
               <li> <%= tableName %></li>
            <% } %>
            </ul>
        </div>

        <div class="section grid grid5 gridlast ec2">
            <h2>Amazon EC2 Instances:</h2>
            <ul>
            <% for (Reservation reservation : ec2.describeInstances().getReservations()) { %>
                <% for (Instance instance : reservation.getInstances()) { %>
                   <li> <%= instance.getInstanceId() %></li>
                <% } %>
            <% } %>
            </ul>
        </div>
    </div>
</body>
</html>

LoginServlet. java

package package10_2;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet(name="LoginServlet", urlPatterns= {"/"})
public class LoginServlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("doPost");

        response.setContentType("text/html");
        PrintWriter out=response.getWriter();

        out.println("doPost");

        Boolean authenticated = request.authenticate(response);
        System.out.println("authenticated=" + authenticated);
        out.println("authenticated=" + authenticated);

        String authType = request.getAuthType();
        System.out.println("auth type =" + authType);
        out.println("auth type =" + authType);

        String remoteUser = request.getRemoteUser();
        System.out.println("remote user =" + remoteUser);
        out.println("remote user =" + remoteUser);

        out.close();

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("doGet");

        response.setContentType("text/html");
        PrintWriter out=response.getWriter();

        out.println("doGet");

        String authType = request.getAuthType();
        System.out.println("auth type =" + authType);
        out.println("auth type =" + authType);

        String remoteUser = request.getRemoteUser();
        System.out.println("remote user =" + remoteUser);
        out.println("remote user =" + remoteUser);

        out.close();

    }

}

Когда я использую первую форму, использующую метод post, я ввожу правильное имя пользователя и пароль, но когда я нажимаю на submit, я получаю диалоговое окно входа в систему, которое запрашивает имя пользователя и пароль. В этом случае имя пользователя - Тина. Вот что отображается на сайте после:

Аутентификация doPost = истинный тип аутентификации = BASI C Удаленный пользователь = Тина

Когда я использую вторую форму, которая использует В методе get я ввел правильное имя пользователя и пароль, но когда я нажимаю «Отправить», веб-сайт показывает:

Тип аутентификации doGet = удаленный пользователь null = null

Должен ли я использовать пост или метод get для входа? Я думаю, что должен использовать метод get.

Как мне заставить метод post работать со значениями имени пользователя и пароля, которые пользователь вводит в форму в индексе. html page?

1 Ответ

2 голосов
/ 12 февраля 2020

HTTP GET не поддерживает отправку формы, вы должны использовать JS, чтобы добавить их в параметр запроса. Но у него есть риски для безопасности.

Так что обычно GET не является хорошим способом обработки входа в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...