SpringBoot:使用Cookie

一、所需要创建的文件

业务层和数据层将不再赘述
在这里插入图片描述

二、开始写代码

  1. CookieUtil
public class CookieUtil {
    //设置Cookie
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String key, String value, int expiry){
        Cookie cookie = new Cookie(key, value);
        cookie.setMaxAge(expiry);
        response.addCookie(cookie);
    }

    //获取所有Cookie
    public static Map<String, String> getCookies(HttpServletRequest request){
        Map<String, String> map = new HashMap<>();
        Cookie cookies[] = request.getCookies();
        if (cookies != null){
            for(int i = 0; i < cookies.length; i++){
                if(!"JSESSION".equals(cookies[i].getName()))
                    map.put(cookies[i].getName(), cookies[i].getValue());
            }
        }
        return map;
    }

    //清空所有的Cookie
    public static void clear(HttpServletRequest request, HttpServletResponse response){
        Map<String, String> map = getCookies(request);
        Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
        while(iter.hasNext()){
            Map.Entry<String, String> me = iter.next();
            Cookie cookie = new Cookie(me.getKey(), "");
            cookie.setMaxAge(0);
            response.addCookie(cookie);
        }
    }
}
  1. LoginController
@Controller
public class LoginController {
    @Autowired
    private UserService userService;

    @RequestMapping("/loginPage")
    public String loginPage(){
        return "login";
    }

    @RequestMapping("/login")
    public String login(HttpServletRequest request, HttpServletResponse response, String username, String password, Model model){
        User user = userService.getUserByName(username);
        if(username.equals(user.getUsername()) && password.equals(user.getPassword())){
            int expire = 60 * 60 * 24 * 7;  //表示7天
            CookieUtil.setCookie(request, response, "username", user.getUsername(), expire);
            CookieUtil.setCookie(request, response, "password", user.getPassword(), expire);
            model.addAttribute("username", username);
            return "main";
        }
        return "login";
    }

    @RequestMapping("/main")
    public String mainPage(HttpServletRequest request, Model model){
        // 判断cookie是否存在,如存在则利用cookie登录,否则返回登录界面
        Map<String, String> map = CookieUtil.getCookies(request);
        String username = map.get("username");
        String password = map.get("password");
        if(username != null && password != null){
            User user = userService.getUserByName(username);
            if(username.equals(user.getUsername()) && password.equals(user.getPassword())){
                model.addAttribute("username", username);
                return "main";
            }
        }
        return "login";
    }
}
  1. login.jsp
<html>
<head>
    <title>login</title>
    <link rel="stylesheet" type="text/css" href="/css/bootstrap.css" />
    <script src="/js/jquery-3.3.1.min.js"></script>
    <script src="/js/bootstrap.js"></script>
</head>
<body>
    <div class="container col-xs-2 col-xs-push-4">
        <h1>Login</h1>
        <form action="/login">
            <div class="form-group">
                <label for="username">Username</label>
                <input type="text" class="form-control" id="username" name="username" placeholder="Username">
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <input type="password" class="form-control" id="password" name="password" placeholder="Password">
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
        </form>
    </div>
</body>
</html>
  1. main.jsp
<html>
<head>
    <title>主页</title>
</head>
<body>
    用户名:${username}
</body>
</html>

三、测试结果

登录成功在该页面会多出两个变量
在这里插入图片描述
下次再打开浏览器就无需再次登录
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值