java的web项目中使用cookie保存用户登陆信息

最近在编写论坛系统的实现,其中就涉及到用户登陆后保持会话直到浏览器关闭,同时可以使用cookie保存登陆信息以便在下次可以自动登陆。使用struts2框架实现。
   下面是在action里登陆和注销的函数
    public String logout() {
        this.getSession().clear();
        Cookie idCookie = new Cookie("id", "");
        Cookie passwordCookie = new Cookie("password", "");
        idCookie.setMaxAge(0); //使cookie失效
        passwordCookie.setMaxAge(0);
        idCookie.setPath("/");   //这个不能少
        passwordCookie.setPath("/");
        servletResponse.addCookie(idCookie);
        servletResponse.addCookie(passwordCookie);
        return SUCCESS;
    }

    public String login() {

        User user = userService.getUser(id, password);
        if (user != null) {
            this.getSession().put("user", id);
            //如果选择保存登陆信息
            if (saveLogin != null) {
                Cookie idCookie = new Cookie("id", id); //可以使用md5或着自己的加密算法保存
                Cookie passwordCookie = new Cookie("password", password);
                idCookie.setPath("/"); //这个要注意
                idCookie.setMaxAge(MAX_AGE);
                passwordCookie.setPath("/");
                passwordCookie.setMaxAge(MAX_AGE);
                servletResponse.addCookie(idCookie);
                servletResponse.addCookie(passwordCookie);
                saveLogin = null;
            }
            return SUCCESS;
        } else {
            this.setInfo("用户名或密码错误");
            return INFO;
        }
    }
    在保存完cookie后要保证以后用户每次访问该系统的任意页面系统都必须先访问用户的cookie查看是否有登陆信息,这个使用servlet的filter实现最为方便。下面就是filter的代码
private void doBeforeProcessing(ServletRequest request) {
        HttpSession session = ((HttpServletRequest) request).getSession(true);
        //首先检查session,若已经登陆则直接忽略一下代码
        if (session.getAttribute("user") != null) {
            return;
        }
        Cookie[] cookies = ((HttpServletRequest) request).getCookies();
        String id = null;
        String password = null;
        if (cookies != null) {
            for (Cookie c : cookies) {
                if (c.getName().equals("id")) {
                    id = c.getValue();
                }
                if (c.getName().equals("password")) {
                    password = c.getValue();
                }
            }
        }
        UserService userService = (UserService) this.getApplicationContext().getBean("userService");
        if (userService.isUser(id, password)) {
            session = ((HttpServletRequest) request).getSession(true);
            session.setAttribute("user", id);
        }
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  {
        doBeforeProcessing(request);
        chain.doFilter(request, response);
    }
    其中涉及的在filter中访问spring的上下文,cookie注意事项以及在action中获取servlet等一些原始对象



http://blog.sina.com.cn/s/blog_4fb1c0fc0100ez3c.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值