개발/BACK

[SpringFramework] 스프링 프레임워크 로그인 (Login) 기능 예제

Hdev&Shoes 2021. 3. 16. 13:25
728x90

이번 시간에는 스프링 프레임워크 환경에서 사용자가 아이디와 비밀번호를 입력 했을 때,

해당 요청을 받아들여 로그인 처리를 하는 방법을 알아보겠다

 

지금 처리하려는 방법은 httpSession을 통해 로그인을 시도한 사용자가 DB정보와 일치하면,

해당 로그인 사용자의 정보를 먼저 VO에 담고, 그 VO를 Session에 담아서 로그인 기능을 구현했다.

 


 

순서를 정리하자면,

 

1.

사용자가 로그인 시도

 

2.

아이디와 비밀번호를 토대로 데이터베이스 정보와 비교

 

3.

일치 : UserVO에 값을 셋팅, 불 일치 : 메세지 표출

 

4.

셋팅 값인 UserVO를 httpSession에 저장

 

5.

종료

 

순서이다.

 


 

먼저 데이터베이스를 생성해야하는데, 나는 MYSQL 을 사용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE `tb_user` (
    `user_id` VARCHAR(15NOT NULL,
    `creat_dt` DATE NULL DEFAULT NULL,
    `user_pw` VARCHAR(15NULL DEFAULT NULL,
    `user_name` MEDIUMTEXT NULL COLLATE 'utf8_general_ci',
    `user_email` VARCHAR(40NULL DEFAULT NULL,
    `user_phone` VARCHAR(15NULL DEFAULT NULL,
    `user_age` VARCHAR(5NULL DEFAULT NULL,
    `user_company` VARCHAR(20NULL DEFAULT NULL COLLATE 'utf8_general_ci',
    `user_no` VARCHAR(20NULL DEFAULT NULL,
    `delete_at` VARCHAR(2NULL DEFAULT NULL,
    PRIMARY KEY (`user_id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
;
 
cs

 


jsp 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<form class="login_form" method="post" action="/login/login_proc">
        <div class="modal-body fn-font">
            <table>
                <colgroup>
                    <col style="width:100px;"/>
                    <col style="width:px;"/>
                </colgroup>
                <tbody style="text-align:center;">
                    <tr>
                        <th>ID</th>
                        <td><input type="text" style="margin-left:10%;width:200px;" id="login_user_id" name="user_id" class="form-control" value="asd"/> </td>
                    </tr>
                    <tr>
                        <th>PW</th>
                        <td><input type="text" style="margin-left:10%;width:200px;" id="login_user_pw" name="user_pw" class="form-control" value="asd"/> </td>
                    </tr>
                </tbody>
            </table>
        </div>
        <div class="modal-footer fn-font">
            <input type="submit" class="btn" id="login_submit" value="예"/>
            <button class="btn" type="button" data-dismiss="modal">아니요</button>
        </div>
</form>
cs

submit 버튼을 이용해서 form 내부에 있는 값을 컨트롤러로 전송한다

로그인 로직에 필요한 아이디값과 패스워드 값만 전달하고 있다

 

여기서 전달한 아이디값과 패스워드 값을 가지고 컨트롤러를 구성했다

form 태그의 action 속성에 입력되어있는 경로를 호출하게 된다

 

--MainController 의 해당 요청

요청파라미터 값 중 @ModelAttribute를 이용해서, View페이지에서 전달받은 아이디값과 패스워드 값을 자동으로 UserVO에 셋팅해준다

userVO에 들어있는 값은 아이디 값과 패스워드 값이 된다

먼저 들어온 아이디값과 패스워드 값을 체크해서 빈 값이 들어오게 되면 Exception을 발생시킨다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@RequestMapping(value ="/login/login_proc", method =RequestMethod.POST)
    public String loginProc(HttpSession session,HttpServletRequest req, HttpServletResponse resp, ModelMap modelMap,@ModelAttribute("userVO") UserVO userVO) {
        
        if(SystemUtil.EmptyCheck(userVO.getUser_id()))
            throw new RuntimeException("아이디를 입력해주세요");
        if(SystemUtil.EmptyCheck(userVO.getUser_pw()))
            throw new RuntimeException("비밀번호를 입력해주세요");
        
        UserVO findUserVO = mainService.findUser(userVO.getUser_id());
        SessionConfigVO sessionConfigVO = new SessionConfigVO();
        sessionConfigVO.setUser_id(findUserVO.getUser_id());
        sessionConfigVO.setUser_name(findUserVO.getUser_name());
        sessionConfigVO.setUser_phone(findUserVO.getUser_phone());
        sessionConfigVO.setNaver_login(false);
        if(!findUserVO.getUser_id().equals(userVO.getUser_id()) ||  !findUserVO.getUser_pw().equals(userVO.getUser_pw())) {
            throw new RuntimeException("아이디 및 비밀번호를 확인해주세요");
        }else {
            session.setAttribute("sessionConfigVO", sessionConfigVO);
            session.setAttribute("user_name", sessionConfigVO.getUser_name());
        }
            
        
        
        
        return "redirect:/";
    }
cs

이후 findUserVO 라는 UserVO 객체에 아이디 값에 대한 정보를 담아온다.

 

findUserVO의 id,password 값(DB value) 과 view 페이지에서 받아온 값(입력값)을 비교해서

동일하다면 로그인이 성공한 것으로 sessionConfigVO라는 객체를 세션에 저장한다.

(저장한 세션은 추 후, 메인 페이지에서 로그인 처리에 활용될 예정이다.)

 

그리고나서 메인페이지로 리다이렉트 시켜주면

session 값에는 로그인한 사용자의 session 값이 담겨있어서, 로그인 처리를 해주면 된다.

 

 

JSTL을 사용해 sessionConfigVO의 값을 체크하고 존재 한다면 화면에 뿌려주기만 하면 된다.

1
2
3
4
5
6
7
8
9
<div class="container">
        <div class="container-header">
        <input type="hidden" value="<c:out value='${sessionConfigVO.user_id }'/>" id="session_id"/>
            <c:if test="${sessionConfigVO ne null}">
                <ul style="height:30px;float:right;margin-bottom:20px;" class="fn-font">
                    <li><a style="color:blue;" class="" >${sessionConfigVO.user_name}' s come in</a></li>
                </ul>    
            </c:if>
        </div>
cs

 

 

결과물 :

728x90