// 재인증이 필요한 페이지 접근 전 검증@GetMapping("/edit/profile")publicStringeditProfile(HttpSessionsession,Modelmodel){Useruser=(User)session.getAttribute("user");BooleanisVerified=(Boolean)session.getAttribute("isVerified");// 세션을 통해 인증 유무 검증if(user==null||isVerified==null||!isVerified){return"redirect:/user/authenticate";}model.addAttribute("user",user);return"edit_profile";}// 재인증 처리@PostMapping("/verify/code")publicStringverifyCode(@RequestParamStringcode,HttpSessionsession){if(isValidCode(code)){session.setAttribute("isVerified",true);return"redirect:/user/edit/profile";}else{return"redirect:/user/authenticate?error=true";}}
// 인터셉터로 적용publicclassAuthInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{HttpSessionsession=request.getSession();Stringuri=request.getRequestURI();// 중요 페이지 접근 시 재인증 확인if(uri.startsWith("/user/edit/")){if(!AccessControl.isVerified(session)){response.sendRedirect("/user/authenticate");returnfalse;}}returntrue;}}
3. 서버 사이드 인증 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 서버 사이드에서 인증 처리@PostMapping("/login")publicStringlogin(@RequestParamStringusername,@RequestParamStringpassword,HttpSessionsession){Useruser=userService.findByUsername(username);if(user!=null&&user.getPassword().equals(password)){session.setAttribute("user",user);session.setAttribute("isVerified",false);// 인증 세션 초기값 설정return"redirect:/user/dashboard";}else{return"login?error=true";}}