关于一个自动登录使用@CookieValue取cookie值的问题。

来源:互联网 发布:五代十国 知乎 编辑:程序博客网 时间:2024/06/06 05:15

跳往首页的代码:

@Controllerpublic class IndexController {    @RequestMapping(value = "/to_indexTest", method = RequestMethod.GET)    public String to_index(@CookieValue(value="cookie_user",required=false)String cookie_user,HttpSession session,HttpServletRequest req){        Cookie[] cookies = req.getCookies();        User user= null;        for(Cookie c :cookies){            String str = "";            if (c.getName() != null && c.getName().equals("cookie_user")) {                str = c.getValue();            }            if (!str.equals("")) {                try {                    str = URLDecoder.decode(str, "utf-8");                } catch (UnsupportedEncodingException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                Gson gson = new Gson();                user = gson.fromJson(str, User.class);                session.setAttribute("user", user);            }        }        /*if( cookie_user != null ){            System.out.println("cookie中去出来的"+cookie_user);            try {                cookie_user = URLDecoder.decode(cookie_user,"utf-8");            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }            Gson gson = new Gson();            User userFromJson = gson.fromJson(cookie_user,User.class);            System.out.println("转"+userFromJson.getUsername());            session.setAttribute("user",userFromJson);        }*/        return "indexTest";    }在这里边,当我使用@CookieValue去取cookie存储的user对象时候,会出现乱码问题,就如上边被注掉的部分,但是使用request的获取cookie的方法这个思路来取,不会出现问题。个人感觉是这个注解的问题,还有待研究。还是需要研究一下。下边是把用户数据添加进cookie的代码: 
    @RequestMapping(value = "/login",method = RequestMethod.GET)    public String login(String username, String password, String login_auto_login,HttpSession session, ModelMap map, HttpServletResponse response){        User user = loginServiceImp.queryUserByUsername(username,password);        if( user != null  ){            session.setAttribute("user",user);            if (login_auto_login != null && !login_auto_login.equals("")) {                //如果前台点击了自动登录,就放在cookie里边                Gson gson = new Gson();                String jsonUser = gson.toJson(user);                try {                    jsonUser = URLEncoder.encode(jsonUser,"utf-8");                } catch (UnsupportedEncodingException e) {                    e.printStackTrace();                }                System.out.println(jsonUser);/*                try {                    String test = URLDecoder.decode(jsonUser,"utf-8");                    System.out.println(test);                } catch (UnsupportedEncodingException e) {                    e.printStackTrace();                }*/                Cookie cookie = new Cookie("cookie_user",jsonUser);                cookie.setMaxAge(60 * 60 * 24 * 7);                response.addCookie(cookie);            }            return "indexTest";        } else {            map.put("msg","用户名或者密码不正确!");            return "login";        }    }