redis在web开发的简单应用---基于spring mvc实现免重复登录demo

  前言

  一直想写关于redis的博客,但redis的应用场景实在是太多了!比如秒杀,静态数据的缓存,数据库缓存,计数器,排行榜等等。。。实在是非常纠结,最近想到了可以与redis配合使用的功能----基于spring mvc的免重复登录、下面来看看是如何实现一个免登陆的demo的吧。

  过程

  首先先导入我们所需要的jar包,如果用maven请自行百度即可。


如果已经部署好spring mvc,那就只需要导入jedis(redis的java封装)与commons-codec(用于密码md5加密)。

  先简单地实现一下登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%  

String sessionid=session.getId();
%>  
<%=sessionid %>
<form action="save">
<input type="text" name="name" >
<br>
<input type="password"name="password">
<br>
<input type="submit" value="login"> 
</form>
</body>
</html>

实现简单的pojo,user类

public class user {
public String name;
public String password;
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}

}

最后一个简单的登录成功页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="quit">注销</a>
</body>
</html>

只有一个注销连接。。不管了反正只是demo。QAQ

下面是1个controller类 login类的实现

@Controller  
public class login 
{  
  @RequestMapping("/login")
  public String login(HttpServletRequest request) {
	  Cookie[] cookies=request.getCookies();
	  for(Cookie cookie : cookies){
          if(cookie.getName().equals("md5")) {
        	  Jedis jedis = new Jedis("localhost");
        	  if(jedis.exists("md5:"+cookie.getValue())) {
        		  jedis.close();
        		  return "success.jsp";
        		  }
          }
      }
	  return "redirect:login.jsp";
  }
	
	
	
  @RequestMapping("/save")  
  public ModelAndView save(HttpServletRequest request,user user,HttpSession httpSession,HttpServletResponse response)  
  {   Jedis jedis = new Jedis("localhost");
      jedis.set("md5:"+DigestUtils.md5Hex(user.name+"redissalt"+user.password),"1");
      Cookie cookie=new Cookie("md5",DigestUtils.md5Hex(user.name+"redissalt"+user.password));
      cookie.setMaxAge(5*60);
      response.addCookie(cookie);
      ModelAndView mov=new ModelAndView();  
      mov.setViewName("success.jsp");
     // mov.addObject("userlist", userlist);
      jedis.close();
      return mov;  
  }  
  
 
  @RequestMapping("/quit")
  public String quit(HttpServletRequest request,HttpServletResponse response) {
	  Cookie[] cookies=request.getCookies();
	  for(Cookie cookie : cookies){
          if(cookie.getName().equals("md5")) {
        	  Jedis jedis = new Jedis("localhost");
        	  jedis.del("md5:"+cookie.getValue());
        	  jedis.close();
        		
          }
      }
	  Cookie cookie=new Cookie("md5", "null");
	  cookie.setMaxAge(0);
	  response.addCookie(cookie);
	  return "login.jsp";
  }}

大概的过程如下,登录访问/login,先检测cookie是否有MD5加密的密码,如果有,将连接redis进行比对,若redis不存在此key,将重定向到登录界面,否则直接进入success界面。

进入登录界面,输入账号密码后post到/save,此方法将上传的账号+盐+密码进行md5加密后缓存到reids以(md5:加密后密码)的key格式缓存下来,再传回cookie给客户端,留作下次免登录的凭证。

进入success界面后,点击注销连接,将清空cookie(把有效时间置为0)并把redis的缓存删除,回到重新登录界面。




cookie带有加密凭证

redis的缓存如下


下次访问/login将直接进入success界面了

猜你喜欢

转载自blog.csdn.net/qq_36642340/article/details/80572694