Java로 Basic 인증을 만들어 보았습니다.

참고 사이트님



let's 프로그래밍
htps //w w. 그럼 ㄔ d리ゔ ぇ. jp/세 rvぇt/아 th/

환경



eclipse2019-9
tomcat9

쓴 동기



배운 것을 잊지 않기 위한 메모 쓰기입니다.
거의 상기 참고 사이트님의 대로에서 움직였습니다만, 자신의 환경에 맞추어 조금씩 변경했으므로, 변경 부분을 써 둡니다.

Basic 인증이란?



간단한 인증 방법.
웹 사이트를 열면 팝업이 표시되고 로그인 ID와 비밀번호가 필요합니다.
ID도 패스워드도 암호화되지 않고 송신되기 때문에, 보안적으로는 상당히 약한 것 같다.
일단 로그인하면 브라우저를 닫을 때까지 로그인 상태가 유지됩니다.

준비할 파일


  • servlet
  • web.xml
  • auth.xml
  • tomcat-users.xml

  • servlet 만들기



    우선 servlet을 만들어 갑니다.

    AuthTest1.java
    package auth;
    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;
    
    // 参考サイト様との変更箇所。アノテーションを加えました。
    @WebServlet("/AuthTest1")
    public class AuthTest1 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException{
    
            response.setContentType("text/html; charset=Shift_JIS");
            PrintWriter out = response.getWriter();
    
            out.println("<html>");
            out.println("<head>");
            out.println("<title>ユーザー認証テスト</title>");
            out.println("</head>");
            out.println("<body>");
    
            out.println("<p>テストページ1</p>");
    
            // 参考サイト様との変更箇所。URLを変更。
            out.println("<p><a href=\"/logintest/AuthTest2\">テストページ2へ</a></p>");
    
            out.println("</body>");
            out.println("</html>");
        }
    }
    

    AuthTest2.java
    package auth;
    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;
    
    // 参考サイト様との変更箇所。アノテーションを加えました。
    @WebServlet("/AuthTest2")
    public class AuthTest2 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException{
    
            response.setContentType("text/html; charset=Shift_JIS");
            PrintWriter out = response.getWriter();
    
            out.println("<html>");
            out.println("<head>");
            out.println("<title>ユーザー認証テスト</title>");
            out.println("</head>");
            out.println("<body>");
    
            out.println("<p>テストページ2</p>");
    
            // 参考サイト様との変更箇所。URLを変更。
            out.println("<p><a href=\"/logintest/AuthTest1\">テストページ1へ</a></p>");
    
            out.println("</body>");
            out.println("</html>");
        }
    }
    

    파일의 위치는 auth 패키지 안.


    web.xml 변경



    WEB-INF/lib 디렉토리의 web.xml을 변경합니다.


    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
      <display-name>logintest</display-name>
    
    <!-- 参考サイト様との変更箇所。アノテーションを使用したので、<servlet>と<servlet-mapping>を消去。 -->
    <security-constraint>
        <web-resource-collection>
          <web-resource-name>User Basic Auth</web-resource-name>
          <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
          <role-name>sales</role-name>
        </auth-constraint>
      </security-constraint>
    
      <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>User Basic Auth</realm-name>
      </login-config>
    
      <security-role>
        <role-name>sales</role-name>
      </security-role>
    
    </web-app>
    

    auth.xml 만들기



    docbase=""는 AuthTest1.java가 있는 디렉토리를 지정합니다.
    파일의 위치는 tomcat을 설치한 디렉토리. ₩Tomcat9₩conf₩Catalina₩localhost₩

    auth.xml
    <Context path="/auth"
    docBase="<?xml version="1.0"?>
    <Context docBase="C:\Users\hoge\pleiades-2019-09-java-win-64bit-jre_20191007\pleiades\workspace\logintest\src\auth" path="/auth"> </Context>">
    </Context>
    

    tomcat-users.xml 변경



    Eclipse 프로젝트의 Severs에서 tomcat-users.xml을 변경합니다.


    tomcat-users.xml
    <!-- 参考サイト様との変更箇所。デフォルトで設定されていたroleはすべて削除しました。謎のエラーが出たので。 -->
    <tomcat-users>
      <role rolename="sales"/>
      <role rolename="staff"/>
      <user username="yamada" password="yamada" roles="sales"/>
      <user username="katou" password="katou" roles="staff"/>
    </tomcat-users>
    

    시도해보기



    아래 화면이 나오면
    사용자 이름: yamada
    암호:yamada
    를 입력하고 로그인할 수 있으면 성공!
    브라우저를 닫을 때까지 로그인 상태가 유지됩니다.


    아래는 role을 설정하지 않았으므로 로그인할 수 없습니다.
    사용자 이름: Katou
    암호:katou

    이상입니다.
    수고하셨습니다.

    좋은 웹페이지 즐겨찾기