JavaWeb에서 Session 및 Cookie를 사용하여 로그인 인증
구현하는 것도 매우 간단하다. Handler Interceptor 하나만 사용자 정의하면 된다
사용자 정의 Handler Interceptor도 몇 줄의 코드만 있습니다
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object obj, Exception err)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object obj, ModelAndView mav) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
// session
String str = (String) request.getSession().getAttribute("isLogin");
// true, true controller
if(str!=null){
return true;
}
// , false, controller
response.sendRedirect("/backend/loginPage");
return false;
}
}
Controller 코드
@Controller
@RequestMapping("/backend")
public class BackendController {
@RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
public String loginPage(HttpServletRequest request,String account, String password){
return "login";
}
@RequestMapping(value = "/login", method = {RequestMethod.POST})
public String login(HttpServletRequest request,RedirectAttributes model, String account, String password){
// , session ,
if ("jack".equals(account)&&"jack2017".equals(password)){
request.getSession().setAttribute("isLogin","yes");
return "redirect:IndexPage";
}else {
// , , RedirectAttributes
model.addFlashAttribute("error"," ");
return "redirect:loginPage";
}
}
// ,
@RequestMapping(value = "/loginOut", method = {RequestMethod.GET})
public String loginOut(HttpServletRequest request) {
request.getSession().removeAttribute("isLogin");
return "redirect:loginPage";
}
@RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
public String IndexPage(HttpServletRequest request){
return "Index";
}
}
spring 설정
<!-- -->
<!-- -->
<mvc:interceptors>
<!-- -->
<mvc:interceptor>
<!-- -->
<mvc:mapping path="/backend/**"/>
<!-- -->
<mvc:exclude-mapping path="/backend/loginPage"/>
<mvc:exclude-mapping path="/backend/login"/>
<bean class="com.ima.Interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
간단한 Session 구현 로그인 인증 시스템은 이렇게 완성됩니다. 로그인 상태에서 브라우저를 종료한 후에도 일정 시간 보류하려면 Session을 쿠키로 바꿀 수 있습니다저희는 보통 쿠키를 사용하거든요.
쿠키랑 세션이랑 방법이 많이 안 맞아요.
쿠키 사용자 정의 HandlerInterceptor 사용
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object obj, Exception err)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object obj, ModelAndView mav) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
// request cookie
Cookie[] cookies = request.getCookies();
if (null==cookies) {
System.out.println(" cookie==============");
} else {
// cookie true controller
for(Cookie cookie : cookies){
if(cookie.getName().equals("isLogin")){
return true;
}
}
}
// , false, controller
response.sendRedirect("/backend/loginPage");
return false;
}
}
컨트롤러의 변화도 크지 않아요.
@Controller
@RequestMapping("/backend")
public class BackendController {
@RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
public String loginPage(HttpServletRequest request, String account, String password) {
return "login";
}
@RequestMapping(value = "/login", method = {RequestMethod.POST})
public String login(HttpServletRequest request, HttpServletResponse response, RedirectAttributes model, String account, String password) {
if ("edehou".equals(account) && "aidou2017".equals(password)) {
Cookie cookie = new Cookie("isLogin", "yes");
cookie.setMaxAge(30 * 60);// 30min
cookie.setPath("/");
response.addCookie(cookie);
return "redirect:IndexPage";
} else {
model.addFlashAttribute("error", " ");
return "redirect:loginPage";
}
}
@RequestMapping(value = "/logOut", method = {RequestMethod.GET})
public String loginOut(HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("isLogin")) {
cookie.setValue(null);
cookie.setMaxAge(0);// cookie
cookie.setPath("/");
response.addCookie(cookie);
break;
}
}
return "redirect:loginPage";
}
@RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
public String IndexPage(HttpServletRequest request) {
return "Index";
}
}
스프링의 설정은 이전과 똑같다주의하다
이것은 단지 시범일 뿐, 실제 프로젝트에서 쿠키의 키와 값은 특수 처리를 거쳐야 하며, 그렇지 않으면 안전 문제를 일으킬 수 있음을 건의합니다
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.