티스토리 뷰
나에게는 이해도 잘 가지 않았던 인터셉터..!
계속 읽다보니까 어떻게 이해가 되긴 되었다.
인터 셉터는 스프링 MVC에서 인터셉터는 URI를 가로채는 일을 합니다.
URI를 가로채서 controller보다 먼저(preHandler), controller 진행 직후(postHandler), View단까지 다 보여준 다음(afterHandler) 3가지로 나눠서 작업 시킬 수 있습니다.
오늘은 이 인터셉터를 활용해서 로그인 처리 를 해보겠습니다.
웹에서 로그인의 가장 기본 방식은 HttpSession 객체를 이용하는 것!
HttpSession은 실제로는 세션쿠키를 이용해 이루어집니다.
세션쿠키가 key라면, HttpSession은 자물쇠입니다.
이런 것들이 쌓이면 Session이 많아 지겠죠?
세션에 보관된 객체는 JSP에서 EL을 이용해서 자동으로 추적합니다.
순서는 ${name }을 검색할 경우
Page -> Request -> Session -> application의 순서대로 원하는 데이터를 검색합니다.
그래서 개발자가 변수가 어딨는지 고민안해도 되는 고마운 존재!
1. 로그인
시에 사용자 정보는 : VO에 저장 --> 세션에 보관
2. VO, DAOImpl, ServiceImpl 을 구현
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 | public class UserVO { private String uid; private String upw; private String uname; private String upoint; public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getUpw() { return upw; } public void setUpw(String upw) { this.upw = upw; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpoint() { return upoint; } public void setUpoint(String upoint) { this.upoint = upoint; } @Override public String toString(){ return "UserVO: " + uid + upw + uname + upoint; } } | cs |
1 2 3 4 5 | public interface UserDDAO { public UserVO login(LoginDTO dto)throws Exception; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Repository public class UserDAOImpl implements UserDDAO{ @Inject private SqlSession session; private static String namespace ="com.itnomads.hh.mappers.userMapper"; @Override public UserVO login(LoginDTO dto)throws Exception { // TODO Auto-generated method stub return session.selectOne(namespace+".login",dto); } } | cs |
1 2 3 | public interface UserService { public UserVO login(LoginDTO dto)throws Exception; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class UserServiceImpl implements UserService { @Inject private UserDDAO dao; @Override public UserVO login(LoginDTO dto) throws Exception { // TODO Auto-generated method stub return dao.login(dto); } } | cs |
2. 컨트롤러
여기서는 중요한 결정이 필요합니다.
1) 컨트롤러에서 HttpSession 객체를 처리할 것인가?
2) 인터셉터에서 HttpSession을 처리할 것인가?
우리는 2번을 선택!
컨트롤러 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @Controller @RequestMapping(value="/user") public class UserController { @Inject private UserService service; @RequestMapping(value="/login", method=RequestMethod.GET) public void loginGET(@ModelAttribute("dto") LoginDTO dto){ } @RequestMapping(value="/loginPost", method=RequestMethod.POST) public void loginPOST(LoginDTO dto, HttpSession session, Model model) throws Exception{ UserVO vo = service.login(dto); if(vo==null){ return; } model.addAttribute("userVO", vo); } } | cs |
3. 인터셉터
LoginInterceptor를 구현해 봅시다
preHandle의 타입은 보통 boolean으로, false일때는 controller를 실행하지 않게 하기 위해서 이다.
'Spring' 카테고리의 다른 글
@ResponseBody (0) | 2018.12.24 |
---|---|
@ModelAttribute (0) | 2018.12.06 |
의문점 (0) | 2018.10.12 |
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value error (0) | 2018.10.12 |
No mapping found for HTTP request with URI [/] in DispatcherServlet with name 'appServlet' (0) | 2018.10.12 |