当前位置:首页 > 后端开发 > Java利用Cookie或Session实现登录验证

Java利用Cookie或Session实现登录验证

6个月前 (05-27)76

简单的登录验证可以通过Session或者Cookie实现,具体如下:

一、利用Session实现登录验证

1、自定义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 {
        //获取session里的登录状态值
        String str = (String) request.getSession().getAttribute("isLogin");
        //如果登录状态不为空则返回true,返回true则会执行相应controller的方法
        if(str!=null){
            return true;
        }
        //如果登录状态为空则重定向到登录页面,并返回false,不执行原来controller的方法
        response.sendRedirect("/loginPage");
        return false;
    }
}

2、编写Controller,实现登录登出

@Controller
@RequestMapping("")
public class BackendController {

    
    @RequestMapping(value = "/login", method = {RequestMethod.POST})
    public String login(HttpServletRequest request,RedirectAttributes model, String name, String password){
        //验证账号密码,如果符合则改变session里的状态,并重定向到主页
        if ("xxx".equals(name)&&"123456".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";
    }
   

}

2、利用Cookie实现登录验证

         如果想登录状态退出浏览器后仍保留一段时间的可以将Session改为Cookie。

 1、自定义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("/loginPage");
        return false;
    }
}

2、编写Controller层代码实现登录登出

@Controller
@RequestMapping("")
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 name, String password) {
        if ("xxx".equals(name) && "123456".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";
    }
}

另外,无论基于Session还是Cookie的登录验证都需要对HandlerInteceptor进行配置,增加对URL的拦截过滤机制。

 

作者:chao09_01
来源链接:https://blog.csdn.net/chao821/article/details/106892742

标签: CookieSession

“Java利用Cookie或Session实现登录验证” 的相关文章

Cookie 和 Session的区别

面试回答: 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗...

session 和 cookie 有什么区别

session 和 cookie 有什么区别 a、存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。 b、安全性不同:cookie 安全...

接口的鉴权cookie、session和token

接口的鉴权cookie、session和token

1、HTTP是无状态协议 什么是无状态?就是说这一次的请求和上一次的请求是没有任何关系的,无法共享信息。好处就是速度快。 2、cookie、session的加入 HTT...

nodejs关于session和cookie的问题

原文链接:https://github.com/alsotang/node-lessons/tree/master/lesson16 众所周知...

WEB后台--基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)

WEB后台--基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)

继续这一个系列,基于Token的WEB后台登录认证机制(并讲解cookie和session机制)。每个后端不得不解决的认证问题。 本系列:...

web核心(4)session与cookie及session跨域与session共享

1.cookie与session的关系 Session 信息都是放在内存的,第一次创建Session的时候,服务端会在 Cookie 里面记录一个Session ID,以JSESS...

cookie和session及token的区别联系

cookie和session及token的区别联系

1 发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的H...

深入理解Session和Cookie的区别

深入理解Session和Cookie的区别

Cookie简介 Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。 目前Cookie已经成为标准,所有的主流浏览器如IE、Net...

java面试题:session和cookie的区别

一. 概念理解 当我们每次登陆一个界面的时候,如果意外关闭了这个界面,当我们立即重新打开这个界面的时候,发现我们并不需要重新登录,这是为什么呢...

cookie和session的区别和用法

cookie和session的区别和用法

flask中cookie和session介绍 一、cookie: 在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第...