-
02.세션을 이용한 로그인.스프링 웹 개발 하기/로그인 처리 2020. 2. 9. 17:21
보기전에 스프링 구조(2)를 참조.
Session은 서버에 어떤 값의 정보를 저장해서 해당 정보를 사용하는 방법입니다.(로그인 같은 경우 사용자 정보.)
그렇기 때문에 브라우저를 닫으면 세션이 끊겨서 해당 정보가 지워지게 됩니다.
1.Mapper 만들기
1234567891011<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="member"><select id="login" resultType="MemberVO">select * from tbl_memberwhere key = #{key}and pw = #{pw}and interlock_type = 'main'</select></mapper>2.TEST 쿼리
1234insert into tbl_member(key,pw,name,email,nickname,auth,interlock_type,regdate)values
3.DAO 만들기
1234public interface MemberDAO {public MemberVO login(MemberVO vo)throws Exception;}123456789@Repositorypublic class MemberDAOImpl implements MemberDAO {@Injectprivate SqlSession session;@Overridepublic MemberVO login(MemberVO vo) throws Exception {return session.selectOne("member.login", vo);}}interface를 만들고 implements로 해당 DAO를 받는다.
3.Service 만들기
1234public interface MemberService {public MemberVO login(MemberVO vo)throws Exception;}12345678910@Servicepublic class MemberServiceImpl implements MemberService{@Injectprivate MemberDAO dao;@Overridepublic MemberVO login(MemberVO vo) throws Exception {return dao.login(vo);}}4.Controller 만들기
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051@RequestMapping("/member/*")@Controllerpublic class MemberController {@Injectprivate MemberService service;// 로그인 폼을 띄우는 부분public String loginForm() {}// end of loginForm// 로그인 처리하는 부분public String loginProcess(HttpSession session, MemberVO dto) throws Exception {String returnURL = "";if (session.getAttribute("login") != null) {// 기존에 login이란 세션 값이 존재한다면 기존값을 제거해 준다.session.removeAttribute("login");}// 로그인이 성공하면 MemberVO 객체를 반환한다.MemberVO vo = service.login(dto);System.out.println(vo);// 로그인 성공if (vo != null) {// 세션에 login인이란 이름으로 MemberVO 객체를 저장해 놓는다.session.setAttribute("login", vo);// 로그인 성공시 이동returnURL = "redirect:/member/success";} else {// 로그인에 실패한 경우 이동returnURL = "redirect:/member/loginForm";}return returnURL; // 위에서 설정한 returnURL 을 반환해서 이동시킴}// 로그아웃 하는 부분@RequestMapping(value = "/logout")public String logout(HttpSession session) {session.invalidate(); // 세션 전체를 날려버림// session.removeAttribute("login"); // 하나씩 하려면 이렇게 해도 됨.return "redirect:/member/loginForm"; // 로그아웃 후 게시글 목록으로 이동하도록 한다.}@RequestMapping(value = "/success")public String success(HttpSession session) {return "member/success"; // Session Test}}5.JSP 만들기
1234567891011<body><form action="/member/loginProcess" id="form" method="post"><div id="login"><input type="text" name="key" placeholder="아이디" ><input type="password" name="pw" placeholder="비밀번호" ><div class="buttonDiv"><button type="submit" class="btn1" id="loginBtn">로그인</button></div></div></form></body>디자인은 간편 디자인에서 로그인 쪽 참조.
6.Interceptor 설정.
interceptor는 쉽게 생각하면은 어떤 정보의 데이터가 맞지 않으면 해당 설정의 경로에 들어갈 경우 다른 페이지로 이동하게 하기 위해서 사용 합니다.
로그인을 예로 들면 해당 session에 로그인 정보가 없으면 특정 경로 (글쓰기 결제등)페이지에 들어가지 못하도록 막는 역할을 합니다.
1)class 만들기(이름을 UserInterceptor로 만들었다.)
1.HandlerInterceptorAdapter 에 있는 preHandle,postHandle를 사용합니다.
123456789101112131415161718192021222324252627public class UserInterceptor extends HandlerInterceptorAdapter {// preHandle() : 컨트롤러보다 먼저 수행되는 메서드@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// session 객체를 가져옴HttpSession session = request.getSession();// login처리를 담당하는 사용자 정보를 담고 있는 객체를 가져옴Object obj = session.getAttribute("login");if (obj == null) {// 로그인이 안되어 있는 상태임으로 로그인 폼으로 다시 돌려보냄(redirect)response.sendRedirect("/login");// 더이상 컨트롤러 요청으로 가지 않도록false로 반환함return false;}// preHandle의return은 컨트롤러 요청 uri로 가도 되냐 안되냐를 허가하는 의미임// 따라서true로하면 컨트롤러 uri로 가게 됨.return true;}//controller의 메소드가 수행이 완료되고, view 를 호출하기 전에 호출됩니다.@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {super.postHandle(request, response, handler, modelAndView);}}2)xml 설정.(servlet-context.xml)
123456789</beans:bean><!-- Interceptor 설정 --><interceptors><interceptor><mapping path="/member/seccess"/><beans:ref bean="UserInterceptor"/></interceptor></interceptors><beans:bean id="UserInterceptor" class="org.woo.web.member.interceptor.UserInterceptor">
1)에서 만든 class의 경로를 calss에 넣어준다. id는 아무렇게나 만들어도 된다.
<mapping path="/member/seccess"/>
1)에서 설정한 데이터가 없으면 들어가지 못하도록 설정한 경로.
<beans:ref bean="UserInterceptor"/>
위에 설정한 id 값을 넣어준다. 혹은 bean에 1)의 class경로를 넣어 주어도 된다.
'스프링 웹 개발 하기 > 로그인 처리' 카테고리의 다른 글
01. 로그인 만들기(DB 만들기) (0) 2020.02.09