redis 登录案例

下图就是登录controller

@Controller
public class LoginController {

    @RequestMapping("/login")
    public String Login(String username, String password, HttpServletResponse response){

        System.out.println(username);
        System.out.println(password);

    //判断账号密码  假数据
        if("mike".equals(username)&&"123".equals(password)){
        //从数据库里查出来的user信息
            User user = new User();
            user.setId(1);
            user.setName(username);
            user.setAge(20);
            user.setGender("男");
            user.setPassword("123");

            //转换user转换成JSON 字符串
            String value = JSON.toJSONString(user);

            RedisUtil.set(username,value);//将登录用户的信息存在redis中 key是用户名,value是登录对象

            //新建cookie 把用户名存进去
            Cookie cookie = new Cookie("LoginUser", username);

            response.addCookie(cookie);//将cookie从服务端发送给客户端浏览器保存
            return "ok";
        }else{

            return "redirect:/lg.html";

        }
        


    }

}

 

下图是登录拦截器  拦截index

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //查到所有cookie
        Cookie[] cookies = request.getCookies();
        boolean flag=true;
        //遍历cookie  如果有 LoginUser 的  cookie的key
        for (Cookie cookie : cookies) {
            if("LoginUser".equals(cookie.getName())){

                //获得这个cookie值,在redis里面查询
                String key = cookie.getValue();

                //通过username查询到 user类
                User user = RedisUtil.getUser(key);

                //如果有这个user类  说明登录过了
                if(user!=null){//已经登录过了
                    flag=false;
                    return true;

                }

            }
        }
        if (flag){//如果flag等于true   去登录页面

            response.sendRedirect("lg.html");
        }
            return false;
    }
}

 

 

 

 

下图是redis连接工具类

public class RedisUtil {

    public static void set(String key,String value){

        Jedis jedis = new Jedis("192.168.59.12",6379);

        jedis.set(key,value);

        jedis.close();

    }

    public static User getUser(String key){

        Jedis jedis = new Jedis("192.168.59.12", 6379);

        String s = jedis.get(key);

        return JSON.parseObject(s,User.class);


    }


}

 

 

逻辑是访问index先登录,登录的用户名存在cookie中,返回给客户端,登录的用户具体信息存在redis中。

docker中创建 loginDemo1  和loginDemo2

 

下图是docker-compose.yml 文件

 

下图是dockerflie文件目录

 

 Dockerflie文件如下

 如法炮制另一个loginDemo2  但是tomcat端口不一样  一个是8081 一个8082  

在nginx 配置数据卷文件中如下配置  

轮询

 重启nginx

这个时候访问就会在两台服务器一下一下挨着访问

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值