ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (국비교육) 37 - project1 이어하기5 + 로그인 기능 + 로그아웃 기능
    개발/국비교육 2023. 7. 21. 17:51

    ■ os 와 브라우저 확인

     

     

     

    <%=request.getHeader("User-Agent")%>

    지금 서버에 접속한 os 와 어떤 브라우저로 들어오는 지 확인 가능하다. 

     

    ■ 서버 이용하기 (11월 말까지만)

     

     

    신규로 만들어준다. (아이디 패스워드 호스트명  비공개)

     

     

    패스워드 바꾸는 방법은 다음과 같다.

    % : 외부에서 내부로 들어올 떄 

     

    다시 접속 끊고 재접속하면 올바르게 비밀번호 변경되었다.

    하단에 저장 누르고 열어준다. 

     

     

    테이블 생성해준다. 

     

     

    이름 지정해주고 추가 눌러준다. 

     

     

    PK 는 레코드의 저장 위치를 결정한다. 

    따라서 PK는 NOT NULL, 유니크 특성을 가진다.

    그러므로 NULL 체크 해준다.  

     

    AUTO INCREMENT 를 사용하면 레코드의 값이 중복되지 않고 1씩 자동 증가하게 된다. 

    따라서 주로 테이블 첫 칼럼으로 많이 사용된다. 

     

     

    TINYINT : 0 ~ 9 까지 사용 기본값 5로 설정할 것이다.

    추후 등급을 0부터 9까지 설정하여 권한 부여할 예정이기 때문이다. 

    Custom text 5 설정하여 기본값 5 처리한다. 

     

    id는 유니크 키로 선택해서 중복으로 생성되는 것을 막는다. 

     

     

    다음과 같이 생성된 것 확인 가능하다. 

    생성일자 m_joindate 는 DATETIME 의 CURRENT TIMES 선택

    주소는 생략 가능하니 NULL 허용해도 된다. 

     

     

     

    다음과 같이 데이터 들어간 것을 확인 가능하다. 

     

     

    다음과 같이 정보 만들어준다.

     

     

    CREATE VIEW membersview AS
    SELECT m_no, m_id, m_pw, m_name FROM members WHERE m_grade = 5;

     

    뷰를 다음 문구를 통해 만들어 줄 수 있다. 

    뷰는 수정 불가로 새로 만들어줘야 한다. 

    읽기만 가능하다. 

     

    해당 조건처럼 출력 가능하다. 

     

     

    조건에 따라 뷰 나온다. 

     

     

    서버 이용을 위해 데이터베이스에서 유저 이름과 패스워드 그리고  url 도 변경해준다. 

    해당 부분은 보안을 위해 git 업로드 및 표시를 하지 않을 예정이다. 

     

    ■ 로그인 창 만들어주기

     

     

    로그인 온클릭 만들어준다. 

    이제 연결되기 위해 컨트롤러 생성 후 맵핑해줘야 한다. 

     

     

     

    다음과 같이 로그인 창 출력 가능하다. 

     

     

    form 태그를 통해서 login 것을 가지고 간다. 

    로그인을 누르면 post 가 없기 때문에 405 오류가 뜬다. 

     

     

     

     

     

    다음과 같이 출력된다. 

     

    * 에러해결 

     

    출력이 안돼서 보니 name 값을 지정을 안해줬었다.

    따라서 name 값을 지정하고 출력하면 나온다.

    참고로 넘기는 값은 name=" " 으로 지정하고 넘긴다. 

     

     

    데이터와 연결하기 위해 로그인 DTO 생성해준다. 

     

     

    변수 선언해주고 getter setter 처리해준다. 

     

     

    이제 LoginDTO 타입 dto 변수 생성해주고,

    해당 값들을 파라미터로 받은 값으로 셋을 통해 저장해준다. 

    서비스를 통해 일하게 만들 것이다.

     

    ※ 참고

    여기서 파라미터 값은 m_id 와 m_pw 가 아니니 참고하자  (뒤에서 수정)

     

     

    이제 이를 service Autowired 를 통해 연결해주준다.

     

     

    로그인 서비스도 만들어준다. 

     

     

    id 와 pw 가 입력되었을 때 우리는 이름과 그리고 아이디가 있는지 여부 체크가 필요하다. 

     

    디비에서 의미하는 null 과 자바에서 의미하는 null 이 다르기 때문에

    아이디가 있는지 없는지를 null 이 아닌 count 를 통해 체크한다.

    그리고 이름을 표시하기 위해 이름 가져온다. 

     

     

    DTO 에도 count 로그인 체크할 count 넣어주고 getter setter 만들어준다. 

    count 는 로그인 시 1 그렇지 않을 경우 0이 뜨게 된다. 

     

     

    로그인 서비스에도 메소드 자동 생성한다.

    이제 DAO 생성해준다. 

     

     

    생성된 DAO 도 SqlSession 과 연결해준다. 

     

     

    이제 서비스도 DAO 와 연결해준다. 

    그리고 리턴 값으로 DAO 가 일한 값을 받는다. 

     

     

    레코드 한 줄만 뽑을 것이니 selectOne 을 선택해준다. 

    네임스페이스 login 아이디 login 으로 할 것이다. 

     

     

    sql 문 조건 지정을 위해 로그인 맵퍼가 필요하다. 

    이전에 있던 boardmapper 를 복사해서 사용하다. 

     

    parameterType : 들어오는 타입

    resultType : 나갈 타입

     

     

    위 사진처럼 type 을 짧게 줄여쓰기 위해서 mybatis-Config 에서 alias 별칭을 정해준다. 

     

     

     

    이제 다음과 같이 m_name 과 로그인 여부를 나타내는 COUNT(*) 값을 사용할 것이다. 

     

     

    그러나 COUNT(*) 에서 () 부분은 사용 불가하다.  

    따라서 우리는 COUNT(*) 를 AS 를 통해 count 로 변경해준다.

     

    * 에러해결

     

     

    getParameter 안에 login.jsp name 에 해당하는 값을 넣어야 하는데 m_id 값을 넣어서 오류가 떴다

    form 을 통해 입력받은 값을 가져와야 하기 때문에 id, pw 를 넣어야 값이 나온다. 

     

     

    다음과 같이 입력받은 값이 나온다. 

     

     

    바나나라는 값은 마리아 디비에 저장되어 있지 않은 아이디와 비번이다.

    만약 없는 값을 입력하면 다음과 같이 null 0 이 나온다.

     

     

    이제 getCount() 값이 1 즉 값이 있는 경우에는 인덱스 창으로,

    그렇지 않은 경우 다시 로그인 페이지로 돌아가게 설정해준다. 

     

    ■ 로그인 세션 유지해주기

     

     

     

    세션이라는 객체를 가져오는데 request 에서 뽑아오는 것이다. 

    세션 만드는 것은 다음 문장을 외우면 된다. 

     

     

    setAttribute 로 세션을 저장한다. 

    톰캣 서버에게 mname 이라는 이름으로 result 변수로 가져온 이름 값을 저장한다.  

     

    크롬용으로 저장 하나 엣지용으로 저장 하나 

    즉, 브라우저마다 다른 세션으로 저장한다. 

     

    세션은 서버에, 쿠키는 클라이언트에 저장된다. 

     

     

     

    로그인한 사람을 출력하기 위해서 menu.jsp 에서 해당하는 동적 EL 태그값을 넣고 멘트를 넣는다.

     

    이제 이런 세션 유지 시간도 정해주면 브라우저를 끄고 다시 켜도

    일정시간 유지되는 것을 확인 가능하다. 

     

     

    우리는 편의를 위해 result  값을 dto 로 변수명 바꿔준다.

    dto 에는 sql 에서 m_name 과 COUNT(*) 값밖에 없다.

    따라서 m_name 은 가져와도 밑에는 가져올 수 없다. 

     

    방법은 두 가지이다.

    1. getParameter 로 입력받은 id 값으로 가져온다. 

    2. sql 문에 mid 값을 넣어줘서 나오게 만들어준다. 

     

     

    이제 출력되는 값도 li 태그를 통해 만들어주고 'myInfo' 로 연결해준다.

    id 와 이름 모두 EL 태그로 동적으로 나올 수 있게 설정해주면 다음과 같이 나온다. 

     

     

    그러나  로그인, 로그아웃 두 개가 뜨니까 조건 걸어서 나오게 해준다. 

     

     

    상단에 JSTL 을 선언해주고 

    choose / when / otherwise 를 통해 조건식을 걸어준다. 

     

    만약 null 값이면 로그인 아이콘

    그렇지 않다면 반겨주는 멘트와 로그아웃 이모티콘 화면에 출력해준다. 

     

     

    다음과 같이 출력된다. 

     

     

    ■ 로그아웃 기능 넣어주기

     

     

    로그아웃 버튼을 눌렀을 떄 세션값 mname 과 mid 가 값이 있을 경우

    removeAttribute 를 통해 세션을 삭제처리 해준다.

     

    삭제 완료 후에는 index 로 돌아오게 설정해준다. 

     

     

    - session.setMaxInactiveInterval(0); : 세션 유지시간을 0으로 = 종료시키기
    - session.invalidate(); : 세션 초기화 = 종료 = 세션의 모든 속성 값을 제거 

     

     

    상단에 로그인 하기 전 아이콘 

     

     

    로그인 완료되면 상단에 아이디와 이름이 뜨고,

    로그아웃 이모티콘이 뜬다.  

     

Designed by Tistory.