본문 바로가기

Back-End/Java

[Spring] 로그인 여부에 따라 페이지 다르게 보여주기

index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/index.do">
    제목: <input type="text" name="title"><p>
    내용: <input type="text" name="content"><p>
    관심분야 : <input type="checkbox" name="chk" value="sports">운동
            <input type="checkbox" name="chk" value="study">공부<p>
    <input type="submit" value="보내기">
</form>
</body>
</html>
cs


제목, 내용, 관심분야를 선택해서 Controller로 전송하는 페이지입니다.

보내기 버튼을 클릭하면 index.do라는 주소로 Controller로 전송됩니다.

로그인 여부에 따라 결과 페이지가 다르게 나타납니다.

로그인이 되지 않았으면 로그인 페이지가 보여지고,

로그인이 되었으면 입력한 폼이 text로 보여집니다.




login.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>login page</title>
</head>
<body>
<form action="/login.do">
    id: <input type="text" name="id"><p>
    password: <input type="password" name="password"><p>
    <input type="submit" value="로그인">
</form>
</body>
</html>
cs


로그인 페이지입니다.

로그인 버튼을 클릭하면 login.do라는 주소로 Controller로 전송됩니다.




LoginInterceptor.java

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
27
28
29
30
package com.example.spring.comon;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
public class LoginInterceptor extends HandlerInterceptorAdapter{
 
    private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        
        logger.info("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
        logger.info("LoginInterceptor 진입");
        logger.info("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
 
        if(request.getSession().getAttribute("id"== null) {
            response.sendRedirect("/resources/1218/login.jsp");
            
            return false;
        }
        return true;
    }
}
 
cs


Controller 진입 전에 로그인 세션 여부에 따라 결과 페이지를 다르게 처리하는 Intereceptor부분입니다.

id가 null이면 login.jsp 페이지로 이동하고, null이 아니면 Controller로 이동합니다.




LoginTestController.java

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.example.spring;
 
import javax.servlet.http.HttpServletRequest;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
@Controller
public class LoginTestController {
    
    private static final Logger logger = LoggerFactory.getLogger(LoginTestController.class);
    
    @RequestMapping(value="/index.do")
    public String index(
            @RequestParam MultiValueMap<String, Object> params,
            HttpServletRequest request, Model model) {
        
        logger.info("params: "+params);
        
        model.addAttribute("params", params);
        
        return "/1218/indexParamView";
    }
    
    @RequestMapping(value="/login.do")
    public String login(
            @RequestParam(value="id"String id,
            @RequestParam(value="password"String password,
            HttpServletRequest request, Model model) {
        
        logger.info("id: "+id);
        logger.info("password: "+password);
        
        request.getSession().setAttribute("id", id); //세션에 아이디값 입력
        request.getSession().setAttribute("password", password); // 세션에 패스워드값 입력
        
        model.addAttribute("id", id);
        model.addAttribute("password", password);
        
        return "redirect:/resources/1218/index.jsp";
    }
}
 
cs


index.do 주소로 들어왔을 경우, 파라미터를 HashMap으로 indexParamView 페이지에 전달해줍니다.

login.do 주소로 들어왔을 경우, id와 password를 세션에 setAttribute해줍니다.




servlet-context.xml

1
2
3
4
5
6
7
8
<interceptors>
    <interceptor>
        <mapping path="/**"/>
        <exclude-mapping path="/login.do"/<!--인터셉터 진입 안하게 할 주소-->
        <beans:bean class="com.example.spring.comon.LoginInterceptor">
        </beans:bean>
    </interceptor>
</interceptors>
cs


xml에 intercepotr 코드를 추가해줍니다.




indexParamView.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
제목: ${params.title}<p>
내용: ${params.content}<p>
관심분야: 
<c:forEach items="${params.chk}" var="chk">
${chk} &nbsp;
</c:forEach>
</body>
</html>
cs

결과페이지에서 파라미터를 출력해줍니다.




출력화면


제목, 내용, 관심분야를 선택하고 보내기버튼을 클릭합니다.




로그인 세션이 없기 때문에 login페이지가 보여집니다.



로그인이 완료되었습니다.

제목, 내용, 관심분야를 입력하고 보내기버튼을 클릭합니다.



로그인이 완료되어 로그인 페이지가 보여지지않고 바로 출력페이지로 이동됩니다.




콘솔로그