ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Login Session 추가
    기초/SPRING 2020. 9. 28. 17:44

    [작업내용]

    로그인이 필요한 화면을 제어하기위해 세션 추가


    [ WEB-INF > web.xml ]

    	<!-- 세션 유지시간(분 단위) -->
    	<session-config>
    		<session-timeout>10</session-timeout> 
    	</session-config>

     

    [ controller ]

    로그인, 로그아웃, 사용자정보 이동페이지 함수 생성

    로그인 확인 ajax페이지 함수 생성

     

    주요키워드

    1. controller 클래스 위에 SessionAttributes 어노테이션 선언
    2. 로그아웃 페이지 파라매터에서 sessionStatus사용 setComplete()함수를 통해 세션 초기화
    3. 로그인 페이지에서는 로그인이 되면 사용자정보페이지로 redirect
    @Controller
    @RequestMapping("env")
    @SessionAttributes("userVo")
    public class EnvController {
    
    	@Resource(name = "envService")
    	private EnvService envService;
    
    	private static final Logger logger = LoggerFactory.getLogger(EnvController.class);
    
    	/* 로그인 */
    	@RequestMapping(value = {"login.dg"}, method = {RequestMethod.GET, RequestMethod.POST})
    	public String login(Model model, @RequestParam HashMap<String, String> paramMap) throws Exception {
    
    		String view = "env/login";
    
    		if(paramMap != null && paramMap.get("userId") != null && paramMap.get("userPw") != null) {
    			UserVo userVo = envService.loginCheck(paramMap);
    			if(userVo!=null) {
    				model.addAttribute("userVo",userVo);
    				view = "redirect:/env/userInfo.dg";
    			}
    		}
    
    		return view;
    	}
    
    	/* 사용자정보 */
    	@RequestMapping(value = {"userInfo.dg"}, method = {RequestMethod.GET, RequestMethod.POST})
    	public String userInfo(Model model) {
    		return "env/userInfo";
    	}
    
    	/* 로그인 확인 */
    	@RequestMapping(value = {"loginCheck.dg"}, method = RequestMethod.POST, produces = "application/text; charset=utf8")
    	@ResponseBody
    	public String loginCheck(Model model, @RequestParam HashMap<String, String> paramMap) throws Exception {
    		UserVo userVo = envService.loginCheck(paramMap);
    
    		return (userVo==null)?"입력한 정보와 일치하는 회원정보가 없습니다.":"success";
    	}
    
    	/* 로그아웃 */
    	@RequestMapping(value = {"logout.dg"}, method = RequestMethod.GET)
    	public String logout(Model model, SessionStatus sessionStatus) {
    		sessionStatus.setComplete();
    		return "redirect:/env/login.dg";
    	}
    }
    

     

    [ interceptor ]

    pre, post, after 생성

    주요키워드

    1. post에 있는 메뉴정보는 이번 포스터와는 상관 X
    2. preHandle return에서 sessionCheck함수 사용
    ----sessionCheck 함수 내용
    1. exceptList에 세션에 영향이 없는 페이지 ( 메인, 로그인페이지 )기입
    2. 세션이 있으면서 login페이지 호출인경우 userInfo페이지로 이동
    3. 세션에 영향이 없는 페이지거나 세션이 있는 경우 호출된 페이지로 이동
    4. 세션에 걸린경우 login페이지로 이동
    public class CustomInterceptor extends HandlerInterceptorAdapter {
    	protected Log log = LogFactory.getLog(CustomInterceptor.class);
    
    	@Resource(name = "commService")
    	private CommService commService;
    
    	@Override
    	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    			throws Exception {
    		log.info("====================================== START ======================================");
    		log.info(" Request URI \t: " + request.getRequestURI());
    
    		return sessionCheck(request, response, handler);
    	}
    
    	@Override
    	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    			ModelAndView modelAndView) throws Exception {
    		log.info("====================================== END ======================================\n");
    		List<MenuVo> menuList = commService.sltMenuList();
    		if(menuList != null && modelAndView != null) {
    			modelAndView.addObject("menuList", menuList);
    		}
    		super.postHandle(request, response, handler, modelAndView);
    	}
    
    	@Override
    	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    			throws Exception {
    		log.info("====================================== afterCompletion ======================================\n");
    		super.afterCompletion(request, response, handler, ex);
    	}
    
    	private boolean sessionCheck(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    		boolean result = false;
    
    		request.getRequestURI();
    
    		String [] exceptList = {
    				"/",
    				"/index.dg",
    				"/env/login.dg",
    				"/env/loginCheck.dg"
    		};
    
    		for(String data : exceptList) {
    			if(data.equals(request.getRequestURI().trim())){
    				result = true;
    				result = super.preHandle(request, response, handler);
    				break;
    			}
    		}
    
    		HttpSession session = request.getSession(false);
    		if(	"/env/login.dg".equals(request.getRequestURI().trim()) &&
    			session != null &&
    			session.getAttribute("userVo") != null) {
    			response.sendRedirect("/env/userInfo.dg");
    		}else if(!result) {
    			if(	session == null ||
    				session.getAttribute("userVo") == null){
    				response.sendRedirect("/env/login.dg");
    			}else {
    				result = super.preHandle(request, response, handler);
    			}
    		}
    
    		return result;
    	}
    
    }
    

     

    '기초 > SPRING' 카테고리의 다른 글

    전자정부 프레임워크 변경사항  (0) 2022.01.03
    [Spring] Mail 보내기  (0) 2020.09.29
    [Spring] Mysql 계층적 쿼리구조  (0) 2020.09.23
    [Spring] Maria DB 연결+SQL LOG  (0) 2020.09.09
    Spring - Interceptor 적용  (0) 2020.08.28

    댓글

Designed by Tistory.