JPA_ 로그아웃 / 회원가입

김지영·2024년 3월 28일

jpa

목록 보기
15/18

1. 로그아웃

로그인과 로그아웃은 Post방식으로 해야함 (get 방식 x)

-WebSecurityConfig

//        TODO: 2) 로그아웃 설정
        http.logout(
                req -> req
                        .logoutUrl("/auth/customLogout")                  // 스프링에서 logout url 제공함 (로그아웃 페이지는 따로 필요없음)
                        .invalidateHttpSession(true)                 // session 삭제 후
                        .logoutSuccessUrl("/")                      // logout에 성공하면 /로 redirect
        );

-header.jsp

<%--            소메뉴 : Logout #4 : 메뉴 달때 form 태그로 달기 (바로 실행될 수 있도록) : post방식으로 숨겨서 --%>
            <li class="nav-item">
                <form action="/auth/customLogout" method="post">
                    <button type="submit" class="btn"> Logout </button>
                    <%--   csrf 보안 토큰 : 해킹 방지 토큰 --%>
                    <%--   언제사용?: post,put, delete 방식 사용시 넣어주어야 인증됨--%>
                    <%--      예) 로그인/로그아웃, 부서추가/수정, 사원추가/수정 등--%>
                    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                </form>
            </li>

2. 회원가입

-MemberService

  • 회원가입은 sava로 만들어줌
//    TODO: 회원가입 : save
    public Member save(Member member) {
        Member member2 = memberRepository.save(member);
        
        return  member2;
    }
}

-MemberController

  • 회원 가입 : insert -> post 방식 -> @PostMapping

    1) 저장(회원가입) 페이지 열기 함수

    @GetMapping("/register")
    public String addMember() {
        return "auth/register.jsp";
    }

3. 저장버튼 클릭시 실행될 함수

-MemberController

  • insert -> post 방식 -> @PostMapping
@PostMapping("/regist")
    public RedirectView createFellow(
            @ModelAttribute Fellow fellow
    )

(1) 전달된 매개변수 객체가(fellow) DB 있는지 조사
=> 있으면 insert 할 필요없음 : 에러페이지로 강제이동
=> 없으면 insert 함

@PostMapping("/regist")
    public RedirectView createFellow(
            @ModelAttribute Fellow fellow
    ) {
 if(fellowService.existsById(fellow.getUserId())==true) {
            return new RedirectView("/auth/error");
        }

(2) 위의 에러가 통과되면 새로운 회원(Fellow) 생성해서 저장(save)
=> 필수) 패스워드 : 암호화

 Fellow newFellow = new Fellow(
                fellow.getUserId(),
                passwordEncoder.encode(fellow.getPassword()), // 필수 암호화
                fellow.getName(),
                fellow.getCodeName()
        );

(3) DB 저장

 fellowService.save(newFellow);
        return new RedirectView("/auth/customLogin");

-전체코딩

@PostMapping("/regist")
    public RedirectView createFellow(
            @ModelAttribute Fellow fellow
    ) {
   if(fellowService.existsById(fellow.getUserId())==true) {
            return new RedirectView("/auth/error");
        }

        Fellow newFellow = new Fellow(
                fellow.getUserId(),
                passwordEncoder.encode(fellow.getPassword()), // 필수 암호화
                fellow.getName(),
                fellow.getCodeName()
        );

        fellowService.save(newFellow);
        return new RedirectView("/auth/customLogin");
    }

1) 매개변수 전달된(jsp 전송) member 가 DB 에 있으면
insert 할 필요 없음 : why? 기존 멤버(회원)

 if(memberService.existsById(member.getEmail()) == true) {
            return new RedirectView("/auth/error"); // 에러페이지 강제 리다이렉트
        }


4. 로그인 되었을때 회원가입과 로그인 헤더 안보이게 하기

(1) 소메뉴 : Admin #1 : 관리자면 이 메뉴보이고, 사용자는 안보임 </sec:authorize>
=> isAnonymous() : 사용자에 권한명이 있다면 html 태그가 화면에 보임

            <sec:authorize access="hasRole('ADMIN')">
                <li class="nav-item">
                    <a class="nav-link active" aria-current="page" href="#">Admin</a>
                </li>
            </sec:authorize>
            
            
            
            

(2) 로그아웃 처리
: <sec:authorize access="isAuthenticated()">html태그</sec:authorize>

  • isAnonymous() : 로그인 했다면 html 태그가 화면에 보임 --%>
<sec:authorize access="isAuthenticated()">
                    <%--                로그아웃 #4 : Logout : form 태그 달기(post 방식) --%>
                    <li class="nav-item">
                        <form action="/auth/customLogout" method="post">
                            <button type="submit" class="btn">Logout</button>
                                <%--  TODO: csrf 보안 토큰 : 해킹 방지 토큰 --%>
                            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                        </form>
                    </li>
                </sec:authorize>

profile
그냥 졍이라구하자

0개의 댓글