Spring(Intelli J 활용) - 회원관리

songmin jeon·2024년 3월 20일
0
post-thumbnail

회원 관리 기능 구현


회원 인증을 위한 기능

  • 로그인 화면 form 만들기
    • 태그에 붙여 넣기
        <form class="form-inline" action="/action_page.php">
         <label for="username">User ID</label>
          <input type="text" class="form-control" placeholder="Enter username" name="username" id="username">
          <label for="password">Password:</label>
          <input type="password" class="form-control" placeholder="Enter password" name="password" id="password">
          <!-- 삭제해도 무관 -->
          <div class="form-check">
            <label class="form-check-label">
              <input class="form-check-input" type="checkbox"> Remember me
            </label>
          </div>
          <!-- 삭제해도 무관 -->
          <button type="submit" class="btn btn-primary">로그인</button>
        </form>

- mySQL에서 회원 테이블 생성

넥스트 > 비번 > 넥스트 > ai > 넥스트> 넥스트 > 익스큐드 > 넥스트 > 피니쉬

  • 이전에 만들어 진거라 표기된 것임.

    • 더블클릭하여 엔티티의 정보 수정 가능
      • 테이블 명
      • 컬럼(데이터 타입, 크기, 이름)

  • 테이블 데이터 내보내기

  • 넥스트 > 비번 입력 >

  • 비번 입력 > 클로즈

  • 유저와 관리자 총 3명정도 데이터 수기 입력 !

  • 그외 그림으로 내보내기 가능.

인텔리제이 설정

  • entity 폴더에 회원VO를 Member.java로 생성
  package org.example.entity;

import lombok.Data;

@Data
public class Member {
    private String username;
    private String password;
    private String name;
    private String email;
}
  • 컨트롤러 폴더에서 LoginController.java 생성
package org.example.controller;

import org.example.entity.Member;
import org.example.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;

import javax.servlet.http.HttpSession;

@Controller
public class LoginController {

    @Autowired
    private LoginService service;

    @PostMapping("/login")
    public String login(Member member, HttpSession session){
        Member dbmember = service.login(member);
        // null 이면 실패! / not null 이면 성공!
        if(dbmember != null){ //성공시
            session.setAttribute("member", dbmember);
        }
        // 다시 시작페이지로 전환
        return  "redirect:/list";
    }
}

- 그외, 서비스를 인터페이스 하여 기능별 ~impl로 하는 방법도 있다.

(해당 교육에서는 impl은 안 배움)


  • service 폴더에 LoginService.java 생성
package org.example.service;

import org.example.entity.Member;
import org.example.repersitoty.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class LoginService {

    @Autowired
    private MemberMapper mapper;

    @Transactional
    public Member login(Member member){
        // 새로운 비즈니스 로직처리... -> commit, rollback, 동기화처리
        return mapper.login(member);
    }
}
  • 레파지토리 폴더에서 MemberMapper.java 생성
package org.example.repersitoty;

import org.example.entity.Board;
import org.example.entity.Member;

import java.util.List;

public interface MemberMapper { // public class SqlSessionFactory implements MemberMapper
    // SqlSessionFactory

    public Member login(Member member);
}
  
  • mybatis-config/mapper 폴더에 MemberMapper.xml 생성
    (매퍼 연결과 로그인 쿼리문 작성)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.repersitoty.MemberMapper">
    <select id="login" resultType="org.example.entity.Member">
        SELECT *
        FROM MEMBER
        WHERE USERNAME = #{username}
        AND PASsWORD = #{password}
    </select>
</mapper>

  • list.jsp에서 로그인 할때와 아닐때 화면 c:if 로 구분
        <!-- 로그인이 필요한 화면 -->
  		<c:if test="${empty member}">
            <form class="form-inline" action="${cpath}/login" method="post">
              <label for="username">User ID</label>
              <input type="text" class="form-control" placeholder="Enter username" name="username" id="username">
              <label for="password">Password:</label>
              <input type="password" class="form-control" placeholder="Enter password" name="password" id="password">
              <button type="submit" class="btn btn-primary">로그인</button>
            </form>
        </c:if>
  
  		<!-- 로그인이 완료된 화면 -->
        <c:if test="${!empty member}">
            <form class="form-inline" action="${cpath}/logout" method="get">
              <label>${member.username}(${member.name})</label>
              <button type="submit" class="btn btn-primary">로그아웃</button>
            </form>
        </c:if>
  • 로그인 완료


로그아웃 기능

  • list.jsp 에 form URL 변경 및 method 맞게 설정
  • LoginController 컨트롤러에서 코드 작성
    @GetMapping("/logout")
    public String logout(HttpSession session){
        // 세션을 무효화 시킴
        // -> 로그아웃 방법은 여러가지
        // (강제[invalidate()], 세션 타임아웃(1800s), 브라우저 종료, 서버 종료)
        session.invalidate();
        return "redirect:/list"; // 로그아웃된 화면으로
    }
profile
제가 한 번 해보겠습니다.

0개의 댓글